“排序相减”操作是指对于任意一个四位数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
模拟题 水题
#include <iostream> #include <algorithm> using namespace std; int main() { int n; cin>>n; while(n--) { int val, times, sqs4[4], tmp; cin>>val>>times; while(times--) { tmp = val; int flag = 0; while(tmp) { sqs4[flag++] = tmp % 10; tmp /= 10; } sort(sqs4,sqs4 + 4); int ta = 0, tb = 0; flag = 10; for(int i = 0; i < 4; i++) { ta += sqs4[i] * flag / 10; flag *= 10; } flag = 10; for(int i = 3; i >= 0; i--) { tb += sqs4[i] * flag / 10; flag *= 10; } if(tb > ta) { swap(ta,tb); } val = ta - tb; } cout<<val<<endl; } return 0; }