第 13 届蓝桥杯 C++ 青少组中 / 高级组选拔赛 2022 年 3 月 13 日真题
答案代码
#include<iostream>
using namespace std;
int main(){
char a;
cin>>a;
cout<<char(a+32);
return 0;
第 14 届蓝桥杯 C++ 青少组中 / 高级组选拔赛 (STEMA)2022 年 8 月 21 日真题
}
解题思路
代码功能概述
这段 C++ 代码的主要功能是从用户那里获取一个字符输入,若该字符是大写字母,将其转换为对应的小写字母并输出;若输入不是大写字母,也会按照 ASCII 码的规则对输入字符对应的 ASCII 码值加上 32 后输出对应的字符。
代码详细分析
1. 头文件和命名空间
收起
cpp
#include <iostream>
using namespace std;
#include <iostream>:引入标准输入输出流库,使得程序可以使用 cin 进行输入操作,使用 cout 进行输出操作。
using namespace std;:使用标准命名空间,这样在代码中就可以直接使用 std 命名空间下的对象和函数,而无需添加 std:: 前缀。
2. 主函数部分
收起
cpp
int main() {
char a;
cin >> a;
char a;:声明一个字符型变量 a,用于存储用户输入的字符。
cin >> a;:从标准输入读取一个字符,并将其存储到变量 a 中。
3. 字符转换与输出
收起
cpp
cout << char(a + 32);
return 0;
}
a + 32:在 ASCII 编码中,大写字母和对应的小写字母的 ASCII 码值相差 32。例如,大写字母 'A' 的 ASCII 码值是 65,对应的小写字母 'a' 的 ASCII 码值是 97,97 - 65 = 32。所以,当输入是大写字母时,将其 ASCII 码值加上 32 就可以得到对应的小写字母的 ASCII 码值。
char(a + 32):将计算得到的 ASCII 码值强制转换为字符类型。
cout << char(a + 32);:将转换后的字符输出到标准输出。
return 0;:表示程序正常结束。
代码存在的问题及改进建议
问题
代码没有对输入的字符进行判断,如果输入的字符本身就不是大写字母,那么加上 32 后输出的结果可能不是预期的,可能会输出一些不可打印的字符或者不符合需求的字符。
-
答案代码
-
#include<iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
int cnt=0;
for(int i=a;i<=b;i++){
if ((i % 10 + i / 10 % 10 + i / 100) == 8)
cnt++;
}
cout<<cnt;return 0;
} -
解题思路
-
代码功能概述
你提供的这段 C++ 代码的主要功能是统计用户输入的两个正整数 a 和 b(其中 a 小于等于 b)之间(包含 a 和 b),各个数位上数字之和等于 8 的整数的个数。代码详细分析
头文件与命名空间收起
cpp
#include <iostream>
using namespace std;
#include <iostream>:引入标准输入输出流库,使得程序可以使用 cin 进行输入操作,使用 cout 进行输出操作。
using namespace std;:使用标准命名空间,这样在代码中就可以直接使用 std 命名空间下的对象和函数,而无需添加 std:: 前缀。
主函数部分收起
cpp
int main() {
int a, b;
cin >> a >> b;
int cnt = 0;
int a, b;:声明两个整型变量 a 和 b,用于存储用户输入的两个正整数。
cin >> a >> b;:从标准输入读取两个整数,并分别赋值给 a 和 b。
int cnt = 0;:声明一个整型变量 cnt 并初始化为 0,用于统计满足条件(各数位数字之和为 8)的整数的个数。
循环遍历与条件判断收起
cpp
for (int i = a; i <= b; i++)
if ((i % 10 + i / 10 % 10 + i / 100) == 8)
cnt++;
for (int i = a; i <= b; i++):使用 for 循环遍历从 a 到 b 的所有整数。
i % 10:计算 i 的个位数。
i / 10 % 10:先将 i 除以 10 去掉个位数,再对结果取模 10,得到 i 的十位数。
i / 100:将 i 除以 100,得到 i 的百位数(这里假设 i 是三位数,如果 i 是两位数,i / 100 的结果为 0)。
if ((i % 10 + i / 10 % 10 + i / 100) == 8):判断 i 的个位数、十位数和百位数之和是否等于 8,如果等于 8,则将计数器 cnt 加 1。
输出结果收起
cpp
cout << cnt;
return 0;
cout << cnt;:将统计得到的满足条件的整数的个数输出到标准输出。
return 0;:表示程序正常结束。 -
第 14 届蓝桥杯 C++ 青少组中 / 高级组选拔赛 (STEMA)2022 年 8 月 21 日真题
-
答案代码
-
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n%10;
return 0;
} -
解题思路
-
这道题非常简单
-
只需要最后用百分号求出3就好了。!
答案代码
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=100;i<=n;i++){
if(i%10!=3 and i%100/10 and i/100!=7){
cout<<i<<endl;
}
}
return 0;
}
解题思路
代码功能概述
这段 C++ 代码的主要功能是统计在 100 到用户输入的正整数 N(范围是 100 ≤ N < 100000)之间,满足以下三个条件的正整数的个数:
正整数的个位数不为 3。
正整数的十位数不为 5。
正整数的百位数不为 7。
代码详细分析
1. 头文件与命名空间
收起
cpp
#include <iostream>
using namespace std;
#include <iostream>:引入标准输入输出流库,使得程序可以使用 cin 进行输入操作,使用 cout 进行输出操作。
using namespace std;:使用标准命名空间,这样在代码中就可以直接使用 std 命名空间下的对象和函数,而无需添加 std:: 前缀。
2. 主函数部分
输入部分
收起
cpp
int main() {
int N;
cout << "请输入一个满足 100 ≤ N < 100000 的正整数 N: ";
cin >> N;
int N;:声明一个整型变量 N,用于存储用户输入的正整数。
cout << ...:向用户输出提示信息,告知用户输入的要求。
cin >> N;:从标准输入读取一个整数,并将其赋值给变量 N。
计数变量初始化
收起
cpp
int count = 0;
声明一个整型变量 count 并初始化为 0,用于统计满足条件的正整数的个数。
遍历与条件判断
收起
cpp
for (int i = 100; i <= N; ++i) {
int unitsDigit = i % 10;
int tensDigit = (i / 10) % 10;
int hundredsDigit = (i / 100) % 10;
if (unitsDigit != 3 && tensDigit != 5 && hundredsDigit != 7) {
count++;
}
}
for (int i = 100; i <= N; ++i):使用 for 循环遍历从 100 到 N 的所有整数。
int unitsDigit = i % 10;:通过取模运算得到当前整数 i 的个位数。
int tensDigit = (i / 10) % 10;:先将 i 除以 10 去掉个位数,再对结果取模 10,得到当前整数 i 的十位数。
int hundredsDigit = (i / 100) % 10;:先将 i 除以 100 去掉个位数和十位数,再对结果取模 10,得到当前整数 i 的百位数。
if (unitsDigit != 3 && tensDigit != 5 && hundredsDigit != 7):判断当前整数的个位数是否不为 3、十位数是否不为 5 以及百位数是否不为 7,如果都满足,则将计数器 count 加 1。
输出结果
收起
cpp
cout << "100 到 " << N << " 之间满足条件的正整数有 " << count << " 个。" << endl;
return 0;
}
cout << ...:将统计得到的满足条件的正整数的个数输出到标准输出。
return 0;:表示程序正常结束。