C++1级考试真题参考答案(2023年12月)
- 2026-10-02 05:47:22
C++1级考试真题参考答案(2023年12月)
第 1 题
输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。输入一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。输出一行两个数,分别为保留2位小数输出的F,以及整数N,以一个空格分开。
我的答案:
#include<iostream>#include<iomanip>using namespace std;intmain(){int N;double F;cin>>N>>F;cout<<fixed<<setprecision(2)<<F<<" "<<N<<endl;return 0;}
第 2 题
两个整数a和b分别作为分子和分母,既分数 a/b ,求它的浮点数值(双精度浮点数,保留小数点后9位) 输入仅一行,包括两个整数a和b(b不为0) 输出也仅一行,分数 a/b 的浮点数值。
我的答案:
#include<iostream>#include<iomanip>// 必须包含此头文件,否则 setprecision 未定义using namespace std;intmain(){int a, b;double F;cin >> a >> b;// 关键点: 1.0*a 强制转换为浮点数运算F = 1.0 * a / b;// 关键点: fixed 与 setprecision 配合控制小数位数cout << fixed << setprecision(9) << F << endl;return 0;}
第 3 题
输入一个字符,如果输入的字符是数字,输出yes, 否则输出no
我的答案:
#include<iostream>using namespace std;intmain(){char ch;cin >> ch;// 核心判断:字符ch的ASCII码是否在‘0’到‘9’之间if (ch >= '0' && ch <= '9') cout << "yes" << endl;else cout << "no" << endl;return 0;}
第 4 题
给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。第一行3个整数n、L、R,分别表示序列的长度,区间的左端点,区间的右端点。(0 < n ≤ 10000, 1 ≤ L ≤ R≤ 1000000) 第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000。输出一个整数,表示序列中大于等于L且小于等于R的数的个数。
我的答案:
#include<iostream>using namespace std;intmain(){int n, L, R, cnt = 0;cin >> n >> L >> R;for(int i = 1; i <= n; i++){int num;cin >> num;if(num >= L && num <= R) cnt++;}cout << cnt << endl;return 0;}
第 5 题
假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个 人(M为不大于N的正整数)也从1到M依次编号。第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。输入正整数N和M,以单个空格隔开。顺次输出正面向上的硬币的编号,其间用空格间隔。
我的答案:
#include<iostream>using namespace std;intmain(){int N, M;cin >> N >> M;bool coins[5005];for(int i = 1; i <= N; i++) coins[i] = true; // 初始化for(int i = 1; i <= M; i++){// 内层循环:j 从 i 开始,每次增加 i,即遍历 i 的倍数for(int j = i; j <= N; j += i){coins[j] = !coins[j]; // 状态取反:开变关,关变开}}// 输出处理:利用标志位控制空格bool start = true;for(int i = 1; i <= N; i++){if(coins[i]){if(start == false){cout << " "; // 后续元素前输出空格}cout << i;start = false;}}cout << endl;return 0;}
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。