本题要求将给定的 n 个整数分别四舍五入到最接近的整十数。整十数即 10 的倍数,例如 10、20、30、…。对于一个整数 x,四舍五入到整十数的规则与常规四舍五入一致:
输入限制为 1 ≤ n ≤ 100,每个整数 x 满足 1 ≤ x ≤ 10000,数据规模很小,直接模拟即可。
将一个整数 x 四舍五入到整十数,等价于找到最接近 x 的 10 的倍数。利用整数除法的特性,可以采用如下常用技巧:
(x + 5) / 10 得到 x 除以 10 后四舍五入的结果(整数商)。(x + 5) / 10 * 10,就得到了四舍五入到整十数的值。为什么 +5 可以实现四舍五入?
在整数除法中,x / 10 会直接截断小数部分。如果我们在 x 上加上 5,那么:
x + 5 的个位数 ≤ 9,不会引起十位进位,(x + 5) / 10 的商与 x / 10 相同,相当于舍去个位。x + 5 的个位数 ≥ 10,会自动向十位进 1,使得商比 x / 10 多 1,相当于进位。之后乘以 10 即恢复为整十数。
因此,对每一个输入的整数,直接套用公式 (x + 5) / 10 * 10 输出即可。
n。n 次,每次读入整数 x。(x + 5) / 10 * 10 并输出。该算法不依赖任何复杂数据结构,只涉及基本的算术运算和输入输出。
O(1)。n 个数,总时间复杂度为 O(n)。n ≤ 100,程序可以在 1ms 内轻松运行完成,完全满足题目要求。空间复杂度也为 O(1),不需要额外存储数组,可以边读入边处理。
cpp1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int n; 6 cin >> n; 7 // 题目保证 1 <= n <= 100 8 for (int i = 1, x; i <= n; i++) { 9 cin >> x; 10 // 题目保证 1 <= x <= 10000 11 cout << (x + 5) / 10 * 10 << '\n'; 12 } 13 return 0; 14}
#include <bits/stdc++.h>:包含标准库的万能头文件,竞赛中常用。using namespace std;:使用标准命名空间,避免重复书写 std::。int n; cin >> n;:读入整数个数。for (int i = 1, x; i <= n; i++):从 1 到 n 循环,每轮读入一个整数 x。cout << (x + 5) / 10 * 10 << '\n';:核心四舍五入逻辑。
x + 5:偏移量,用于判断进位。/ 10:整数除法,实现四舍五入到十位的效果。* 10:还原为整十数。'\n':换行,效率比 endl 更高(endl 会额外刷新缓冲区)。0 表示正常退出。本题的关键在于理解整数除法和四舍五入之间的关系,掌握 +5 再除法的技巧后,可以轻松推广到其他精度的四舍五入(如整百、整千等)。