题目解析
我们需要通过最少的操作次数,使得给定的正整数 n 的十进制表示中至少包含一个数字 7。每次操作可以加上任意一个完全由 9 组成的数(例如 999999、999999999 等)。
核心思路
当加一个由 9 组成的数时,数位的值会按照 (n+9)mod10 的规律变化。例如,个位加 9 时,数值变化序列为:
0→00+9=9→99+9=18→818+9=27→727+9=36→636+9=45→545+9=54→454+9=63→363+9=72→272+9=81→181+9=90→0
循环周期为 10。因此,对于任意数位,最多需要 9 次操作即可遍历所有可能的数值。
我们枚举所有长度为 1∼9 的完全由 9 组成的数,将其加到 n 后检查结果是否包含 7,并记录最小操作次数。
AC Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <bits/stdc++.h> using namespace std; #define int long long int t, n, ans = 100; int nine[10];
signed main() { cin >> t; for (int i = 1; i <= 9; i++) nine[i] = nine[i-1] * 10 + 9; while (t--) { cin >> n; ans = 100; for (int i = 1; i <= 9; i++) { for (int j = 0; j <= 10; j++) { int k = n + nine[i] * j; bool flag = false; while (k > 0) { if (k % 10 == 7) flag = true; k /= 10; } if (flag) ans = min(ans, j); } } cout << ans << endl; } return 0; }
|