第 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;}