51nod 2020 排序相减

“排序相减”操作是指对于任意一个四位数n,将四个数字分别进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n1,然后继续将n1中的四个数字进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n2,以此类推,最后总会得到一个数字黑洞,无法跳出。

 

例如:样例2中4176 = 6532 - 2356

 

输入

第一行输入一个整数T,表示数据组数(1<T<10000);
第二行输入一个正整数n(1000<=n<=9999)和一个正整数k(1<=k<=100),表示操作次数;

输出

对于每组数据,输出对于开始的数据n在第k次“排序相减”后结果绝对值。

输入样例

2
1234 2
3562 1

输出样例

8352
4176

模拟
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>

using namespace std;
int t,n,k;
int deal(int d) {
    int dd = d;
    int a[4];
    for(int i = 0;i < 4;i ++) {
        a[i] = d % 10;
        d /= 10;
    }
    sort(a,a + 4);
    int num = 0;
    for(int i = 0;i < 4;i ++) {
        num = num * 10 + a[3 - i] - a[i];
    }
    if(num == dd) k = 0;
    return num;
}
int main() {
    scanf("%d",&t);
    while(t --) {
        scanf("%d %d",&n,&k);
        while(k --) n = deal(n);
        printf("%d\n",n);
    }
}

 

上一篇:【51nod 1514】 美妙的序列


下一篇:51nod——1672 区间交 (树状数组解决区间交问题)