1. 数字反转
题目描述
输入一个整数(绝对值不超过10000),将其反转后输出。要求忽略前导零(如反转后为100,则输出1)。
输入格式
一行,一个整数n
输出格式
一行,反转后的整数
样例输入
-380
样例输出
-83
解析
通过字符串处理或数学取模反转,注意负号处理。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
cin >> s;
int sign = 1, start = 0;
if (s[0] == '-') {
sign = -1;
start = 1;
}
reverse(s.begin() + start, s.end());
int num = stoi(s); // 自动去除前导零
cout << num;
return 0;
}
2. 最大公约数与最小公倍数
题目描述
输入两个正整数(均≤10000),输出它们的最大公约数和最小公倍数。
输入格式
一行,两个整数a b
输出格式
一行,两个整数(gcd lcm)
样例输入
12 18
样例输出
6 36
解析
欧几里得算法求gcd,lcm = a * b / gcd。
#include <iostream>
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
int a, b;
cin >> a >> b;
int g = gcd(a, b);
cout << g << " " << a * b / g;
return 0;
}
3. 素数判定
题目描述
输入一个正整数n(n≤10000),判断是否为素数,输出"Yes"或"No"。
输入格式
一行,一个整数n
输出格式
一行,判断结果
样例输入
17
样例输出
Yes
解析
试除法判断,只需检查到√n即可。
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
int main() {
int n;
cin >> n;
cout << (isPrime(n) ? "Yes" : "No");
return 0;
}
4. 斐波那契数列
题目描述
输入整数n(1≤n≤30),输出斐波那契数列第n项(F(1)=1, F(2)=1)。
输入格式
一行,一个整数n
输出格式
一行,一个整数
样例输入
5
样例输出
5
解析
递推或递归实现,注意递归可能超时,推荐递推。
#include <iostream>
using namespace std;
int main() {
int n, f[31] = {0, 1, 1};
cin >> n;
for (int i = 3; i <= n; i++)
f[i] = f[i - 1] + f[i - 2];
cout << f[n];
return 0;
}
5. 字符统计
题目描述
输入一行字符串(长度≤1000),统计其中字母、数字、空格和其他字符的个数。
输入格式
一行字符串(可能包含空格)
输出格式
四行:字母数、数字数、空格数、其他字符数
样例输入
"Hello 123! *"
样例输出
5 3 2 2
解析
遍历字符串,用isalpha(), isdigit(), isspace()分类统计。
#include <iostream>
#include <cctype>
using namespace std;
int main() {
string s;
getline(cin, s);
int alpha = 0, digit = 0, space = 0, other = 0;
for (char c : s) {
if (isalpha(c)) alpha++;
else if (isdigit(c)) digit++;
else if (isspace(c)) space++;
else other++;
}
cout << alpha << endl << digit << endl << space << endl << other;
return 0;
}
6. 矩阵对角线求和
题目描述
输入一个3×3矩阵,计算主对角线和副对角线元素之和。
输入格式
三行,每行三个整数
输出格式
两行:第一行主对角线和,第二行副对角线和
样例输入
1 2 3 4 5 6 7 8 9
样例输出
15 15
解析
主对角线:a[i][i],副对角线:a[i][2-i]。
#include <iostream>
using namespace std;
int main() {
int a[3][3], s1 = 0, s2 = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
cin >> a[i][j];
if (i == j) s1 += a[i][j];
if (i + j == 2) s2 += a[i][j];
}
cout << s1 << endl << s2;
return 0;
}
7. 冒泡排序
题目描述
输入n个整数(n≤100),用冒泡排序升序排列后输出。
输入格式
第一行整数n,第二行n个整数
输出格式
一行,排序后的整数(空格分隔)
样例输入
5 5 3 4 1 2
样例输出
1 2 3 4 5
解析
经典冒泡排序实现。
#include <iostream>
using namespace std;
int main() {
int n, a[105];
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
return 0;
}
8. 简单计算器
题目描述
输入两个整数和一个运算符(+、-、*、/),输出运算结果(除法保留两位小数)。
输入格式
一行:a op b(如:3 + 5)
输出格式
一行:结果
样例输入
6 / 4
样例输出
1.50
解析
根据运算符分支处理,注意除法类型转换。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int a, b;
char op;
cin >> a >> op >> b;
switch (op) {
case '+': cout << a + b; break;
case '-': cout << a - b; break;
case '*': cout << a * b; break;
case '/':
if (b == 0) cout << "Error";
else printf("%.2f", static_cast<double>(a) / b);
break;
}
return 0;
}
9. 数字出现次数
题目描述
输入n个整数(n≤1000),再输入一个目标数x,统计x出现的次数。
输入格式
第一行:n
第二行:n个整数
第三行:x
输出格式
一行:出现次数
样例输入
6 1 3 5 3 2 3 3
样例输出
3
解析
遍历数组计数即可。
#include <iostream>
using namespace std;
int main() {
int n, x, cnt = 0, a[1005];
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
cin >> x;
for (int i = 0; i < n; i++)
if (a[i] == x) cnt++;
cout << cnt;
return 0;
}
10. 金币问题
题目描述
骑士第一天获得1金币,之后两天(第二、三天)每天获得2金币,接下来三天每天3金币...持续k天获得k金币。输入天数n(n≤10000),输出总金币数。
输入格式
一行,整数n
输出格式
一行,总金币数
样例输入
6
样例输出
14
解析
循环模拟发放过程。
#include <iostream>
using namespace std;
int main() {
int n, total = 0, k = 1, days = 0;
cin >> n;
while (n) {
int give = min(k, n); // 当前阶段发放天数
total += give * k; // 发放金币
n -= give;
k++; // 进入下一阶段
}
cout << total;
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



