蓝桥杯青少选拔赛C++真题解析:位数判断与字符串去重

需积分: 17 5 下载量 76 浏览量 更新于2024-08-04 收藏 27KB DOC 举报
"第十四届蓝桥杯青少选拔赛C++8月21日场次的真题及参考答案,包括三个编程题目:求正整数个位数、判断数字满足特定条件的数量以及字符串去重并保持字典序最小。" 在此次蓝桥杯青少选拔赛中,参赛者需要掌握C++语言的基本语法和逻辑思维能力。以下是三个题目的详细解析: 1. 编程实现:个位数 这个问题要求程序读取一个正整数N,并输出其个位上的数字。解题的关键在于理解整数除法和模运算。对于给定的输入N,可以通过对10取模得到个位数,因为模10操作会返回数字的最后一位。例如,对于输入123,`123 % 10`的结果就是3。 ```cpp int n; cin >> n; cout << n % 10; ``` 2. 编程实现:判断数字 题目要求统计100到N之间满足特定条件的正整数数量。这些条件是:个位不是3,十位不是5,百位不是7。解决这个问题的方法是遍历这个范围内的所有数字,对每个数字应用条件检查,并累加满足条件的计数。如示例代码所示,使用循环和条件判断即可实现。 ```cpp int n, sum = 0; cin >> n; for (int i = 100; i <= n; i++) { if (i % 10 != 3 && i / 10 % 10 != 5 && i / 100 % 10 != 7) { sum++; } } cout << sum; ``` 3. 编程实现:去重 去重的同时保持字典序最小,意味着需要保留首次出现的每个字符,并确保结果字符串是最小的。这需要使用一个字符数组来跟踪字符出现的情况,并根据字典序进行处理。当遍历字符串时,如果遇到的字符未在数组中出现过,则添加到结果字符串中,如果已经存在,就跳过。为了保持字典序,需要按字符的原始顺序添加到结果字符串中。 ```cpp string s; getline(cin, s); bool used[26] = {false}; string result; for (char c : s) { if (!used[c - 'a']) { used[c - 'a'] = true; result += c; } } cout << result; ``` 这三个题目涵盖了C++基础语法中的变量、输入输出、条件判断、循环控制以及字符串处理等内容,适合于评估青少年选手的基础编程能力和逻辑思维能力。通过解答这些问题,参赛者可以提升对C++语言的理解和实际运用能力。