1 单选题(每题 2 分,共 30 分)
第1题 2026年春节联欢晚会上一个武术表演节目《武BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
A. 检测重心的重力传感器 B. 预装的AI算法程序
C. 接收动作指令的遥控器 D. 拍摄其他机器人的摄像头
解析:答案B。传感器、键盘、鼠标、遥控器、游戏杆、摄像头、麦克风等是输入设备,屏幕、打印机等中输出设备。算法程序是软件不属于输入输出设备,所以B错误。故选B。
第2题 小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态( ):
A. 单击右键并选择弹出菜单中的"重命名" B. 双击左键
C. 按功能键F1 D. 按回车键
解析:答案A。修改文件名用"重命名",单击鼠标右键并选择弹出菜单中的"重命名"。双击左键是"打开"文件,按功能键F1一般是"帮助", 按回车键也相当于双击左键是"打开"文件,所以A正确。故选A。
第3题 下面C++代码可以执行,有关说法正确的是( )。
|--------------------------------------------|
| 1│double PI = 3.1415926; 2│cout << (PI); |
A. 为了方便初学者, cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
B. cout << (PI) 修改为 cout << (Pi) 能正常执行
C. 不能用 PI 做变量名,因为要保存圆周率这个常量
D. 将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错
解析:答案D。C++/C变量名是大小写敏感的,即大小写是不同不变量,因此PI、Pi、pi是三个不同的变量,故A、B错误,PI符合C++/C变量名命名规则,可以赋常数,故C错误。变量名可以是PI,也可以是Pai,两者都符合C++/C变量名命名规则,所以D正确。故选D。
第4题 C++表达式 3 * 3 % 2 的值为( )。
A. 81 B. 27 C. 4 D. 1
解析:答案D。C++/C中"* / %"为同优先级运算符,计算从左向右计算,先算"3 * 3"得9,运算符%为求余运算,再算"9 % 2"得1,所以D正确。故选D。
第5题 整型变量 a 、 b 的初值都是 4,则下面的C++代码执行后的输出是( )。
|--------------------------------------------------------------------------------------------|
| 1│a, b = 3, 4; 2│cout << (a + 2) << (b - 2) << endl; 3│cout << a << b << endl; |
|----|-----------|----|-----------|----|-----------|----|-----------|
| A. | 1│61 2│43 | B. | 1│52 2│34 | C. | 1│62 2│44 | D. | 1│62 2│32 |
解析:答案A。C++/C中"a, b = 3, 4;"为逗号表达式,这是将多个表达式分别求值,相当于:
a;
b = 3;
4;
只有被赋值,故a=4,b=3,(a+2)输出6,(b-2)输出1,输出第一行为61,第二行为43,所以A正确。故选A。
第6题 下面C++代码的相关说法,正确的是( )。
|---------------------------------------------|
| 1│int N = 0; 2│cin >> N; 3│cout << (N); |
A. 执行时如输入 10 ,则将输出 10 B. 执行时如输入 3.14 ,将报错
C. 执行时如输入 ABC ,将报错 D. 执行时如输入 -10 ,将报错
解析:答案A。输入3.14,N接收的是3,不会出错;输入ABC,N没有接收数据,其值仍为0,不会出错;输入-10,N接收的是-10,不会出错。所以A正确。故选A。
第7题 下面C++代码执行时,其说法正确的是( )。
|---------------------------------------------------------------------------------------------------------------------|
| 1│int M = 0, N = 0; 2│cin >> M; 3│cin >> N; 4│ 5│if (N > M) 6│ cout << (N - M); 7│else 8│ cout << (M - N); |
A. 如果输入一个正数和一个负数,其输出结果肯定是大于0
B. 不管是负整数、正整数亦或0,其结果肯定是大于等于0
C. 如果 N 和 M 是相等的整数,将不会有输出
D. 如果 N 和 M 输入带有小数点的数,将按整数部分计算
解析:答案B。选项A不完全正确,结果可能为0;选项B,包含0,正确;选项C,当N=M时,由else语句后的cout输出0,错误;选项D,当输入输入带有小数点的数时,整数部分被M接收,N接收不到数据,仍为0,故不是按整数部分计算,错误。故选B。
第8题 下面C++代码执行后的输出是( )。
|-------------------------------------------------------------------------------------------|
| 1│int i, tnt = 1; 2│for (i = 0; i < 5; i++) 3│ tnt *= i; 4│printf("%2d%2d\n", tnt, i); |
|----|--------|----|--------|----|--------|----|--------|
| A. | 1│24 5 | B. | 1│10 5 | C. | 1│ 0 4 | D. | 1│ 0 5 |
解析:答案D。for循环结束时i=5(此时i<5不成立),因为当i=0,tnt*i=0,故tnt=0,所以输出为 0 5。故选D。
第9题 执行下面C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12...... 之值。例如输入 4 ,则计算序列前4 项的值,规律如序列所示,输出为 0 。下面说法中正确的是( )。
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│int N, tnt, i; 2│cout << "请输入正整数:"; 3│cin >> N; 4│ 5│tnt = 0; 6│for (i = 1; i < N + 1; i++) // L1 7│ if (i % 3 == 1) // L2 8│ tnt += -i; 9│ else 10│ tnt += i; 11│cout << tnt; |
A. L1行中 i < N + 1 应该修为 i < N 才会符合预期
B. L2行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
C. L2行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
D. 当前代码能实现题目所描述计算目标
解析:答案D。因为for循环i从1 开始,包含N项,所以条件是i<=N,即i<N+1,所以选项A错误;L2行中 i % 3 == 1 应修改为 i % 3 == 0,则第1项为正,第3项为负,故错误;L2行中 i % 3 == 1修改为 i % 3,则相当于i % 3!=0,第1项、第2项都为负,第3项为正,故错误;所以D正确。故选D。
第10题 下面C++代码的相关说法,正确的是( )。
|--------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│int i; 2│for (i = 1; i < 10; i++){ 3│ if (i % 2 == 0){ 4│ continue; // L1 5│ } 6│ else 7│ cout << i << "#"; 8│} 9│cout << i << "END"; |
A. 上述代码执行后,其输出是 1#3#5#7#9#9END
B. 删除 else 后的执行效果与当前代码相同
C. 删除 else 且将 cout << i << "#" 移入L1行下面,则执行效果与当前代码相同
D. 在 cout << i << "END" 前增加判断 if(i > 10) ,其执行效果与当前代码相同
解析:答案B。因为循环中遇到continue语句,就直接跳到下一循环,相当于跳过循环体中continue语句。所以对程序当i为偶数地不会有输出,循环结束时i=10,最后会输出"10END",全部输出为"1#3#5#7#9#10END",选项A错误;删除 else 后,当i为奇数时仍能执行"cout << i << "#";",故效果与当前代码相同,选项B正确;删除 else 且将 cout << i << "#" 移入L1行下面,则"cout << i << "#";"永远不会被执行,只会输出"10END",选项C错误;在 cout << i << "END" 前增加判断 if(i > 10),因为此时i=10,条件i>10不成立,"10END"不会输出,选项D错误。故选B。
第11题 一个正整数的每位都是个位数,称为数位,最高位非0。下面的C++代码用于求正整数的所有数位之和,简称数位和。如 123 的各数位分别是1、2、3,则其数位和为 1+2+3 ,结果为6。为实现该目标,横线处应该填写的代码是( )。
|-------------------------------------------------------------------------------------------------------------------------------|
| 1│int N; 2│cin >> N; 3│int tnt = 0; 4│while (N != 0){ 5│ ____________; 6│ ____________; 7│} 8│cout << "N的数位和为:" << tnt; |
|----|---------------------------|----|--------------------------------|
| A. | 1│tnt += N / 10 2│N /= 10 | B. | 1│tnt += N % 10 2│N /= 10 |
| C. | 1│tnt += N / 10 2│N %= 10 | D. | 1│tnt = tnt + N % 10 2│N %= 10 |
解析:答案B。要取各位数,可以用数%10获得个位数,用数/10去掉个位数,当数/10为0时,数位已取完,结束。第5行数位和要加N%10,填tnt=tnt+N%10,第6行修正N,填N=N/10,与选项B一致。故选B。
第12题 小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的C++代码是其实现,横线处应该填入的代码是( )。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│int N; 2│cin >> N; 3│ 4│int odd_count = 0; // 记录奇数的个数 5│int old_number = N; // 保存原数 6│ 7│while (N != 0){ 8│ if (_________________) 9│ odd_count += 1; 10│ 11│ N = (N - N % 10) / 10; 12│} 13│cout << old_number << "中共有 " << odd_count << " 个奇数"; |
A. N % 10 % 2 == 0 B. N % 10 % 2 == 1 C. N / 10 / 2 == 1 D. N / 2 / 10 == 0
解析:答案B。要取各位数,可以用数%10获得个位数,用数/10去掉个位数,等价(数-数%10)/10。所以横线处要填取个位数,即N%10能不被2整除,不能整除为奇数,或余数为1为奇数,所以横线处应填N%10%2==1。故选B。
第13题 小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 M 和 N ;然后将较大的数字放在较小的前面,拼成一个4位数;将这个4位数除以3的余数添加到4位数的后面,得到一个5位数;最后判断这个5位数能否被14整除。下面的C++代码用于判断 M 和 N 是否符合全部要求,如果符合则输出 Y 否则输出 N 。例如输入 85 和 79 ,可以拼出 85792 ,恰好是14的倍数,则输出 Y 。关于下面代码描述正确的是( )。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│int M, N, Q; 2│cin >> M >> N; 3│ 4│if(M > N) // L1 5│ Q = M*100+N; 6│else 7│ Q = N*100+M; 8│ 9│if((Q*10+Q%3) % 14 == 0) // L2 10│ cout << "Y"; 11│else 12│ cout << "N"; |
A. 代码段不能完成正确判断
B. L1行代码中条件应该改为 M <= N
C. L2行代码应该改为 if ((Q*10+Q/3) % 14 == 0)
D. 代码段可以不使用变量 Q ,而是在区分 M 和 N 大小后分别直接用它们来判断
解析:答案D。所给代码能完成正确判断,选项A错误;L1行代码中条件应该改为 M <= N,不影响结果,选项B不正确;Q/3为求除以3的商,而不是除以3的余数,选项C错误;代码中确实可以不使用变量 Q ,而是在区分 M 和 N 大小后分别直接用它们来判断,但程序会复杂一些。故选D。
第14题 执行下面C++代码可以判断一个6位正整数 N 的高3位和低3位的差是否是314的倍数。例如 628314 就符 合要求。横线处应该填入( )。
|----------------------------------------------------------------------------------------|
| 1│cin >> N; 2│if (___________________________) 3│ cout << N << "符合条件" << endl; |
A. ((N % 1000) - (N / 1000)) / 314 == 0 B. ((N / 1000) - (N % 1000)) % 314 == 0
C. ((N % 1000) - (N / 1000)) / 314 D. ((N / 1000) - (N % 1000)) % 314
解析:答案B。求6位正整数N的高3位为N/1000,低3位为N%1000,6位正整数N的高3位和低3位的差是(N/1000- N%1000), 314的倍数为%314==0。故选B。
第15题 N 是一个正整数。如果 N 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个"双螺旋数"。例如 12375 的所有奇数位的数位和是9,同时它的所有偶数位的数位和也是9,则 12375 就是一个双螺旋数。下面的C++代码用于判断输入的 N 是否为双螺旋数。空白处应该填入的代码是( )。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│int i, N, N1=0, N2=0, N0; 2│cin >> N; 3│N0 = N; 4│while (N){ 5│ _________________________ 6│ _________________________ 7│} 8│if(N1 == N2) 9│ cout << N0 << "是双螺旋数" << endl; |
|----|-----------------------------------------------|----|-----------------------------------------------|
| A. | 1│N1 += N%10, N /= 10; 2│N2 += N%10, N /= 10; | C. | 1│N1 += N/10, N /= 10; 2│N2 += N/10, N /= 10; |
| C. | 1│N1 += N%10, N %= 10; 2│N2 += N%10, N %= 10; | D. | 1│N1 += N/10, N %= 10; 2│N2 += N/10, N %= 10; |
解析:答案A。数位和,每次+数%N,数/10调整数。所以从个位开始数的奇数位和为N1 += N%10, N /= 10;,此时N已去掉个位,从个位开始数的偶数位和为N2 += N%10, N /= 10;,如N为奇数位,则最后一轮计算,求出N1之后 N=0,所以N2+0,值保持不变。所以选项A正确。故选A。
2 判断题(每题 2 分,共 20 分)
第1题 小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。
解析:答案正确(√)。可以看时间、打电话和收尾信息的电话手表,属智能手表,需要安装智能手表操作系统。故正确。
第2题 C++表达式 4 % 2 和 2 * 2 % 2 的结果相同。
解析:答案正确(√)。C++的"* / %"三个运算符优先级相同,计算顺序为从左向右。4 % 2=0,2 * 2 % 2=4%2=0,结果相同。故正确。
第3题 下面C++代码段成功执行后将输出 0 。
|-------------------------------------------------------------------------|
| 1│for (i = 1; i < 10; i++) 2│ if (i % 3 == 0) 3│ break; 4│cout << i; |
解析:答案错误(╳)。C++的break为终止本循环,跳出循环体,执行循环体后的语句。不题当循环到i=3时,i%3==0成立,跳出循环执行cout << i;输出3。故错误。
第4题 下面能够正常执行的C++代码段用于求1到N之和,N为正整数。因为 i < N + 1 ,所以是1到N且包含N之和。
|--------------------------------------------------------------------------------------------------------------------------------|
| 1│tnt = 0; 2│cout << "请输入正整数:"; 3│cin >> N; 4│total = 0; 5│for (i =1; i < N + 1; i++) ; 6│ total += i; 7│cout << total; |
解析:答案错误(╳)。因为第5行后有分号(;),所以循环体为空,total += i;并不是循环体,循环结束后i=N+1,输出结果为N+1而不是1到N之和。故错误。
第5题 执行下面的C++代码段,其语句 cout << (N) 将被执行0次或无数次(即死循环)。
|---------------------------------------------|
| 1│cin >> N; 2│while (N) 3│ cout << (N); |
解析:答案正确(√)。如果输入为0,则不会执行循环体(语句 cout << (N) 将被执行0次);如果输入为非0,则因为N不会变化,循环条件永远为真,会无数次执行循环体(即死循环)。故正确。
第6题 下面的C++代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和 从右到左读该数,其值相同。例如,121 和 414 都是对称数,而 123 不是对称数。( )
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1│cout << "请输入正整数:"; 2│cin >> n; 3│ 4│old_number = n; 5│new_number = 0; 6│while (n != 0){ 7│ new_number = new_number * 10 + n % 10; 8│ n /= 10; 9│} 10│ 11│if (old_number == new_number) 12│ cout << "对称数"; 13│else 14│ cout << "非对称数"; |
解析:答案正确(√)。第7行为从个位开始,从右向左"组装"一个新数据,即生成一个原数据old_number倒过来的新数据new_number,如两数据相等,则原数据对称(也称"回文")。故正确。
第7题 执行下面的C++代码段,如果变量都为整型变量,输入为大于0的整数,则输出数值一定为 -N 的值。
|--------------------------------------------------------------------------------------------|
| 1│cin >> N; 2│total = 0; 3│for (i = -N; i < N; i +=2) 4│ total += i; 5│cout << total; |
解析:答案正确(√)。如N>0且为整数,则第3行、第4行的结果相当于:
-N-(N-1)+(N-2)-...-2-1+0+1+2+...+(N-2) +(N-1)=-N
故正确。
第8题 执行C++语句 printf("%d\n", 3.14) 将报错。
解析:答案错误(╳)。在 C++ 中,printf("%d\n", 3.14) 的行为属于未定义行为(undefined behavior),原因是:①%d是用于输出有符号十进制整数的格式说明符,期望接收一个int类型的参数。②但实际传入的是3.14,这是一个double类型的字面量(C++中浮点数常量默认为double类型)。③printf是变参函数,不会对参数进行隐式类型转换,因此会将3.14的二进制表示(按double存储)错误地解释为int,导致输出结果不可预测,但不会报错。故错误。
第9题 执行下面的C++代码后将输出 2500 。
|---------------------------------------------------------------------------------|
| 1│int cnt = 0; 2│for (int i = 1; i < 100; i++) 3│ cnt += i++; 4│cout << cnt; |
解析:答案正确(√)。如N>0且为整数,则第2行、第3行的结果相当于:
1+3+5+7+...+97+99=(1+99)*50/2=2500
故正确。
第10题 小明在测试C++的 printf 的功能时执行了 printf("%-5d\n", 314) ,则代码输出的结果是 -5314 。
解析:答案错误(╳)。在 C++ 中,printf("%-5d\n", 314) 的输出结果是:
314 (即数字 314 后跟两个空格,共占5个字符宽度)。
格式说明符 %-5d 的含义:
-:表示左对齐(默认是右对齐)。
%d:以十进制整数形式输出。
5:指定最小输出宽度为5个字符,不足默认补空格。
数字314占3个字符,因此需要补充2个空格,使其总宽度达到5。左对齐意味着空格补在数字右边。故错误。
3 编程题(每题 25 分,共 50 分)
3.1 编程题1
- 试题名称:交朋友
- 时间限制:1.0 s
- 内存限制:512.0 MB
3.1.1题目描述
Alice 班上共有 4 个小朋友,身高分别为𝐻₁, 𝐻₂, 𝐻₃, 𝐻₄,其中 Alice 的身高为𝐻₁。
Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?
3.1.2 输入格式
输入共4行,第𝑖行包含一个整数𝐻ᵢ,表示班上小朋友的身高。
3.1.3 输出格式
输出1行,包含一个整数ℎ,表示 Alice 想交的朋友的身高。
3.1.4 样例
3.1.4.1 输入样例
3.1.4.2 输出样例
3.1.5 样例解释 样例1中,Alice身高为150,第2、3 个小朋友与 Alice 身高差距为15,同样最接近,Alice选较矮的一个即第3个 身高为135的小朋友交朋友。
3.1.6 数据范围
保证100≤𝐻ᵢ≤199且𝐻ᵢ互不相同。
3.1.7 编写程序
解析:由于是一级,没有数组知识点要求,所以不能用数组进行循环判断,好在数据少可以用顺序一个一个判。由于Alice的身高为𝐻₁,所以只需𝐻₂、𝐻₃、𝐻₄与𝐻₁的差作三次判断。
方法一:
思路:按题意设计逻辑。
设身高差d= 𝐻₂‒𝐻₁,Alice的朋友frd=𝐻₂,则只需再判两次。若𝐻₃‒𝐻₁<d,则frd=𝐻₃,若相等则d为d与𝐻₃取小者;若𝐻₄‒𝐻₁<d,则frd=𝐻₄,若相等则d为d与𝐻₄取小者。参考代码如下:
cpp
#include <iostream>
using namespace std;
int main() {
int h1, h2, h3, h4, d, frd;
cin >> h1 >> h2 >> h3 >> h4;
if (h2 - h1 > 0)
d = h2 - h1;
else
d = h1 - h2;
frd = h2;
if (h3 - h1 > 0) {
if (h3 - h1 == d) {
if (h3 < frd) frd = h3;
} else if (h3 - h1 < d)
frd = h3, d = h3 - h1;
} else if (h1 - h3 == d) {
if (h3 < frd) frd = h3;
} else if (h1 - h3 < d)
frd = h3, d = h1 - h3;
if (h4 - h1 > 0) {
if (h4 - h1 == d) {
if (h4 < frd) frd = h4;
} else if (h4 - h1 < d)
frd = h4;
} else if (h1 - h4 == d) {
if (h4 < frd) frd = h4;
} else if (h1 - h4 < d)
frd = h4;
cout << frd << endl;
return 0;
}
方法二:
思路:方法一中,对某同学身高需多处改变frd为同一值,如在判h3时有两个条件都要修改frd为h3,判h4时有两个条件都要修改frd为h4,逻辑没有合并,由于hᵢ可能小于h1,又作了一条件判断,两部分的代码是类似的(主要是差值的正负)。增加变量dist作为最小距离,即方法一中的d,d作为本次距离,即hᵢ-h1。方法二将两种需修改朋友身高的条件合并,不直接用hᵢ-h1判断,改用d=hᵢ-h1,用d判断,简化方法一。完整简化代码如下:
cpp
#include <iostream>
using namespace std;
int main() {
int h1, h2, h3, h4, d, frd, dist;
cin >> h1 >> h2 >> h3 >> h4;
dist = h2 - h1;
if (dist < 0) dist = -dist;
frd = h2; // 对h2, 朋友只能是h2
d = h3 - h1;
if (d < 0) d = -d;
if (d < dist || (d == dist && h3 < frd))
frd = h3, dist = d; // 对h3如比h2更符合题意,修改朋友,修改身高差
d = h4 - h1;
if (d < 0) d = -d;
if (d < dist || (d == dist && h4 < frd))
frd = h4; // 对h4如比h2、h3更符合题意,修改朋友,最后一位不用修改身高差
cout << frd << endl;
return 0;
}
3.2 编程题2
- 试题名称:数字替换
- 时间限制:1.0 s
- 内存限制:512.0 MB
3.2.1题目描述
Alice不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?
3.2.2 输入格式
输入一行,包含一个整数 𝐴,表示替换前的数。
3.2.3 输出格式
输出一行,包含一个整数 𝐵,表示替换后的数。
3.2.4 样例
3.2.4.1 输入样例#1
|-----------|
| 1│8459045 |
3.2.4.2 输出样例#1
|-----------|
| 1│8859085 |
3.2.4.3 输入样例#2
|-------|
| 1│123 |
3.2.4.4 输出样例#2
|-------|
| 1│123 |
3.2.4.5 样例解释
对于样例1,输入 8459045 中有两个 4,都将其替换为了 8,得到 8859085。 对于样例2,输入 123 中不包含 4,无需修改输入数字,输出 123。
3.2.5 数据范围
0≤𝐴≤10⁸。
3.2.6 编写程序
解析:由于要取数字的每一位,用字符数组或字符串做是最方便的,但一级题,只能用一级知识点来做。设N为要处理的数,则N%10为个位的数(除以10的余数),N/10为去掉个位数后剩下的数。

图1 数字与权值
如图1所示,一个五位数54321,每一位都有一个权值,个位为1,十位为10,百位为100,千位为1000,万位为10000,从个位1开始每向左一位权值增加10倍,所以54321可以表示为5*10000+4*1000+3*100+2*10+1=(((5*10+4)*10+3)*10+2)*10+1=54321。
方法一:
思路:设A为原数字,B为修改后的数字,r为权值,则
现在需要从原数A中取出每一位,可用d=A%10取出个位1位,然后调整A=A/10(去掉个位),取出的位如是4要修改为8(if (d=4) d=8;),要重新组装为修改后的B,B=B+r*d; r=r*10; (注:B的初值为0,r的初值为1)。
可参考单选题第11题、第12题和判断题第6题。注意本题与判断题第6题的区别:判断题第6题是反转(颠倒)次序,故用B=B*10+d; ,权值乘在组装的数B上;本题次序不变,故要用B=B+r*d; r=r*10; ,权值乘在数位d上。完整参考代码如下:
cpp
#include <iostream>
using namespace std;
int main() {
int A = 0, B = 0, d, r = 1; // A≤10⁸, int足够
cin >> A;
while (A > 0) {
d = A % 10;
if (d == 4) d = 8;
B += r * d;
A /= 10;
r *= 10;
}
cout << B << endl;
return 0;
}
方法二:
思路:用字符数组做,如下标i对应的元素难为'4',直接修改该下标元素为'8',然后输出该元素。本方法需三级知识点。参考代码如下:
cpp
#include <iostream>
using namespace std;
char A[9]; // A≤10⁸, 最多9位
int main() {
cin >> A;
int n = sizeof(A);
for (int i = 0; i < n; i++) {
if (A[i] == '4') A[i] = '8';
cout << A[i];
}
return 0;
}