“排序相减”操作是指对于任意一个四位数n,将四个数字分别进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n1,然后继续将n1中的四个数字进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n2,以此类推,最后总会得到一个数字黑洞,无法跳出。
例如:样例2中4176 = 6532 - 2356
Input
第一行输入一个整数T,表示数据组数(1<T<10000); 第二行输入一个正整数n(1000<=n<=9999)和一个正整数k(1<=k<=100),表示操作次数;
Output
对于每组数据,输出对于开始的数据n在第k次“排序相减”后结果绝对值。
Input示例
2 1234 2 3562 1
Output示例
8352 4176
注意一下操作次数k=0的情况就好
#include <iostream> #include <algorithm> using namespace std; int a[5]; int fun(int n) { int m=1; for(int i=0; i<n; i++) m*=10; return m; } int main() { int t; cin>>t; while(t--) { int T,k,i=0; cin>>T>>k; if(k==0) cout<<T<<endl; else while(k--) { i=0; while(T!=0) { a[i++]=T%10; T/=10; } sort(a,a+i); int j,sum=0,sum1=0; for(j=i-1; j>=0; j--) { sum+=a[j]*fun(j); } for(j=0; j<i; j++) { sum1+=a[j]*fun(i-1-j); } if(k==0) cout<<sum-sum1<<endl; else T=sum-sum1; } } return 0; }