题解:P11825 [TOIP2024] 6174

· · 题解

这个题目难度并不高,所以我蓝名写题解应该没有问题吧。

本题基本思路就是循环题目描述中的步骤并判断是否重复,与之前重复就输出。

那就上代码吧。

#include<bits/stdc++.h>
using namespace std;
int a[105],g[10005];
int main()
{
    long long n,b,cl,d,e,f,jc,bc;
    string c;
    cin>>n>>cl;
    for(int i=1;i<=n;i++)
    {
        cin>>c;
        jc=c.size();//注意可能有前导零被删的数
        f=0;
        g[0]=0;
        for(int j=0;j<jc;j++)
        {
            a[j]=c[j]-'0';
            g[0]+=a[j]*pow(10,jc-j-1);
        }
        if(jc!=cl)
        {
            for(int j=jc;j<=cl;j++)
            {
                a[j]=0;
            }
        }
        for(int k=1;k<=10000;k++)
        {
            if(f==1) break;
            sort(a,a+cl);
            d=0;
            e=0;
            for(int j=0;j<cl;j++)
            {
                d+=a[j]*pow(10,j);//由大至小排列
                e+=a[j]*pow(10,cl-j-1);//由小至大排列
            }
            g[k]=d-e;
            for(int j=0;j<cl;j++)
            {
                a[j]=g[k]/pow(10,j);
                a[j]=a[j]%10;
            }
            for(int j=0;j<k;j++)
            {
                if(g[k]==g[j])
                {
                    f=1;
                    cout<<g[k]<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}