“排序相减”操作是指对于任意一个四位数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
acm入门基础
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int num1[4],num2[4];
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>k;
while(k--)
{
int t=0;
while(n)
{
num1[t]=n%10;
num2[t]=num1[t];
t++;
n=n/10;
}
sort(num1,num1+4,greater<int>());//降序
sort(num2,num2+4,less<int>());//升序
int x=num1[0]*1000+num1[1]*100+num1[2]*10+num1[3];
int y=num2[0]*1000+num2[1]*100+num2[2]*10+num2[3];
n=x-y;//不需要绝对值了,降序得到大数,升序得到小数,大数减小数
}
cout<<n<<endl;
}
}