根據題意我們需要找到每個數字經過操作後第一個重複出現的數字。
因此使用map來記錄(可能有更好的方法),剩下的便是實作。
實作的過程便是先記錄目前數字的每一項,然後排序之後回傳大-小。
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 28 29 30 31 32
| #include<bits/stdc++.h> using namespace std; #define int long long int q, n; int f(int x) { vector<int> a(n); for(int i=0;i<n;i++) { a[i]=x%10; x/=10; } sort(a.begin(), a.end()); int u=0, v=0; for(int i=0;i<n;i++) { u*=10, v*=10, u+=a[i], v+=a[n-i-1]; } return v-u; } void solve() { int m; cin>>m; map<int, bool> chk; chk[m]=1; while(1) { m=f(m); if(chk[m]) {cout<<m<<'\n';return;} else chk[m]=1; } } signed main() { cin>>q>>n; while(q--) solve(); }
|