11.10-深高北周一校本课题解
2025-11-10 20:40:10
发布于:广东
题目链接:https://www.acgo.cn/homework/13222?teamCode=1984126673475133440
① A667. 数字和
题意
输入一个整数 n(0<n<1000),输出 1+2+…+n 的和。
思路
用一个变量 sum 从 0 开始,循环从 1 加到 n 即可(虽然有公式,但我们练习循环写法)。
代码(独立程序)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
// 读入 n
scanf("%d", &n);
int sum = 0;
// 从 1 加到 n
for (int i = 1; i <= n; i++) {
sum += i; // 把 i 加到 sum 里
}
// 输出结果
printf("%d\n", sum);
return 0;
}
② A683. 字符三角形
题意
输入一个字符,输出一个由这个字符组成的等腰三角形。样例显示三行:1、3、5 个字符,居中摆放。
思路
按照样例固定输出 3 行。
- 第 1 行:前面先输出 2 个空格,再输出 1 个字符
- 第 2 行:先 1 个空格,再 3 个字符
- 第 3 行:0 个空格,再 5 个字符
空格数可以用循环打印,字符个数也用循环打印。
代码(独立程序)
#include <bits/stdc++.h>
using namespace std;
int main() {
char ch;
// 读入一个字符(跳过前面的空白)
scanf(" %c", &ch);
// 行号从 0 到 2(共 3 行)
for (int row = 0; row < 3; row++) {
int spaces = 2 - row; // 第 0 行 2 个空格,第 1 行 1 个,第 2 行 0 个
int cnt = 1 + 2 * row; // 第 0 行 1 个字符,第 1 行 3 个,第 2 行 5 个
// 打印空格
for (int i = 0; i < spaces; i++) printf(" ");
// 打印字符
for (int i = 0; i < cnt; i++) printf("%c", ch);
printf("\n"); // 换行
}
return 0;
}
③ A430. 序列最大值
题意
给定一个长度为 N 的整数序列,输出其中的最大值。
输入:先给 N(1≤N≤100),再给 N 个整数 X(范围 -100~100)。
思路
一边读数一边记录当前最大值即可。注意第一个数要用来初始化最大值。
代码(独立程序)
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
scanf("%d", &N);
int x;
// 先读第一个数,用它初始化最大值
scanf("%d", &x);
int mx = x;
// 还剩下 N-1 个数
for (int i = 1; i < N; i++) {
scanf("%d", &x);
if (x > mx) mx = x; // 如果更大就更新
}
printf("%d\n", mx);
return 0;
}
④ A328. 回文数
题意
回文数:从左到右与从右到左读都是一样的数(如 141 是,144 不是)。输入 n(1≤n≤100000),从 1 到 n,把所有回文数每个一行输出。
思路
对每个 i(1…n):
- 把
i的数字反过来(用取模%10和整除/10) - 如果“反过来”的数等于原数,就是回文数,打印出来。
全程只用循环和简单运算。
代码(独立程序)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
scanf("%d", &n);
// 枚举每个数 i(1 到 n)
for (int i = 1; i <= n; i++) {
int t = i; // t 用来“拆分数字”
int rev = 0; // rev 存放反过来的数
// 把 t 的每一位取出来,反向拼到 rev 中
while (t > 0) {
int d = t % 10; // 取出最后一位
rev = rev * 10 + d; // 放到 rev 的后面
t /= 10; // 去掉最后一位
}
if (rev == i) {
printf("%d\n", i); // 是回文就输出
}
}
return 0;
}
⑤ A501. 级数求和
题意
定义 Sn = 1 + 1/2 + 1/3 + ... + 1/n。给定整数 k(1≤k≤15),求最小的 n,使得 Sn > k。
思路
从 i=1 开始,累加 1.0/i(用小数 double 存储)。
当和 sum 第一次严格大于 k 时,当前的 i 就是答案 n。
(注意比较是 >,不是 >=。)
代码(独立程序)
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
scanf("%d", &k);
double sum = 0.0; // 用小数保存和
int i = 0; // 记录加到了第几个数
// 不断加 1/(i),直到 sum > k
while (sum <= k) {
i++; // 准备加第 i 项
sum += 1.0 / i; // 累加一项
// 循环条件会在下一次判断 sum 是否仍 <= k
}
// 当跳出循环时,sum 已经 > k,当前 i 就是最小的 n
printf("%d\n", i);
return 0;
}
这里空空如也





有帮助,赞一个