题解: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;
}