选择题部分
在 C++ 中,以下代表布尔类型的是( )
- 选项:A. double B. bool C. int D. char
- 答案:B
- 解析:C++ 中布尔类型的关键字为
bool
,用于存储逻辑值true
或false
。
执行以下程序,输出的结果是( )
int x = 1, y = 2;
int z = (7 * x + 11 * y) - 11;
cout << z << endl;
- 选项:A. 12 B. 13 C. 18 D. 20
- 答案:C
- 解析:计算顺序为
7×1=7
,11×2=22
,相加得 29 后减 11,结果为 18。
执行以下程序,输出的结果是( )
int a = 28, b = 10;
if (a <= 10) { b = 5; }
else if (a <= 20) { b = 15; }
else { b = 25; }
cout << b << endl;
- 选项:A. 0 B. 5 C. 15 D. 25
- 答案:D
- 解析:
a=28
不满足前两个条件,执行else
分支,b
赋值为 25。
下列符号中表示逻辑运算符 "或者" 的是( )
- 选项:A. & B. && C. | D. ||
- 答案:D
- 解析:C++ 中逻辑或运算符为
||
,&&
为逻辑与,&
和|
为按位运算符。
执行以下代码,程序输出的结果是( )
int cnt = 0;
for (int i = 0; i <= 2; i++) { for (int j = 0; j <= 4; j++) { cnt += i * j; }
}
- 选项:A. 18 B. 16 C. 24 D. 30
- 答案:D
- 解析:
i=1
时累加和为 10,i=2
时为 20,总和为 30(i=0
时贡献 0)。
编程题部分
题目 1:计算树苗总数
项目 | 描述 |
---|
题目描述 | 已知每班树苗数m 和班级数n ,求总树苗数。 |
输入 | 一行两个正整数m 、n 。 |
输出 | 一行,m*n 的结果。 |
样例 | 输入6 10 → 输出60 。 |
#include <iostream>
using namespace std;int main() {int m, n;cin >> m >> n;cout << m * n;return 0;
}
题目 2:分类求和(A 类与 B 类数)
项目 | 描述 |
---|
题目描述 | 将 1 到n 的数分为能被t 整除的 A 类和不能的 B 类,求两类和。 |
输入 | 一行两个正整数n 、t 。 |
输出 | 一行,A 类和与 B 类和(空格分隔)。 |
样例 | 输入20 7 → 输出21 189 。 |
#include <iostream>
using namespace std;int main() {int n, t;cin >> n >> t;int k = n / t;int sum_A = t * k * (k + 1) / 2;int total_sum = n * (n + 1) / 2;int sum_B = total_sum - sum_A;cout << sum_A << " " << sum_B;return 0;
}
题目 3:计算月份天数(含闰年判断)
项目 | 描述 |
---|
题目描述 | 计算指定年份y 和月份m 的天数,闰年 2 月为 29 天。 |
输入 | 一行两个正整数y 、m 。 |
输出 | 一行,该月的天数。 |
样例 | 输入2024 2 →输出29 ;输入2018 3 →输出31A |
#include <iostream>
using namespace std;int main() {int y, m;cin >> y >> m;int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool isLeap = (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);if (isLeap && m == 2) cout << 29;else cout << days[m];return 0;
}
题目 4:数字反转(去除前导零)
项目 | 描述 |
---|
题目描述 | 将数字反转并去除前导零(如120→21 )。 |
输入 | 第一行n ,第二行n 个正整数。 |
输出 | 一行n 个反转后的整数(空格分隔)。 |
样例 | 输入3 和123 320 78 → 输出321 23 87 。 |
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int main() {int n;cin >> n;for (int i = 0; i < n; i++) {string s;cin >> s;reverse(s.begin(), s.end());int j = 0;while (j < s.length() && s[j] == '0') j++;if (j == s.length()) cout << 0;else cout << s.substr(j);if (i < n - 1) cout << " ";}return 0;
}
题目 5:小球颜色收集(滑动窗口)
项目 | 描述 |
---|
题目描述 | 在n 个小球中选连续k 个,求最多不同颜色数。 |
输入 | 第一行n 和k ,第二行n 个颜色值。 |
输出 | 一行,最大不同颜色数。 |
样例 | 输入7 3 和1 2 1 2 3 3 1 →输出3 。 |
#include <iostream>
#include <vector>
using namespace std;int main() {int n, k;cin >> n >> k;vector<int> c(n);for (int i = 0; i < n; i++) cin >> c[i];vector<int> count(300001, 0);int unique = 0, max_colors = 0;for (int i = 0; i < k; i++) {if (count[c[i]] == 0) unique++;count[c[i]]++;}max_colors = unique;for (int i = k; i < n; i++) {count[c[i - k]]--;if (count[c[i - k]] == 0) unique--;if (count[c[i]] == 0) unique++;count[c[i]]++;if (unique > max_colors) max_colors = unique;}cout << max_colors << endl;return 0;
}
所有题目总结
题目类型 | 核心知识点 | 关键算法 / 数据结构 |
---|
树苗总数 | 基础算术 | 直接乘法 |
分类求和 | 等差数列求和、数学推导 | 公式计算 |
月份天数 | 闰年判断逻辑 | 条件分支 |
数字反转 | 字符串处理、前导零处理 | 字符串反转、遍历 |
小球颜色收集 | 滑动窗口、区间统计 | 计数数组、动态维护 |