codeforces C. Devyatkino
题目简述:
给定一个整数n,可以给n加上仅由9组成的整数(9,99,999,9999......),问最少进行多少次可以使得n的任一数位上出现7?
思路:
观察规律,看看加上这个整数后对n的影响,可以发现对应数位上的数+上9会使得当前数位的值-1,可以根据这个特性求解;
这时我们可以发现次数最多不会超过9(对于6,-9次1就会变成7),次数很小,可以从小到大依次枚举次数
但考虑9很奇怪,不好想,我们可以换一种角度,把9看成10-1;对于n我们加几次就会-几次1,所以问题就变成了n-i加10,100等何时最少次数出现7(变成了可以对每一位+1,就很简单了);
现在我们可以进一步想到,次数最多不会超过7,因为对于n-i,最坏情况我们可以在最高位的前一位+高于n-i的数位的10的次幂,+7次便会符合条件
对于每一个n-i,我们枚举他的每一位数,对于符合条件的数直接输出即可,因为我们是从小到大枚举的;
总代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int N=5e5+10;
void solve(){int n;cin >> n;for (int i=0;i<7;i++) {string s=to_string(n-i);for (auto x:s) {int t=x-'0';if (t==7) {cout << i << endl;return ;}else if (t<7&&7-t==i) {cout << i << endl;return ;}}}cout << 7 << endl;
}
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr);int q=1;cin>>q;while(q--) solve();return 0;
}