日常水题:将一个四位整数按位排序重组,用大到小排序后的四位数减去从小到大的四位数替代老的数,如果该数在之前出现过,就停止变换,输出变换的次数。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
bool cmp(int a,int b)
{
return b-a;
}
int tranfm(int a)
{
int num[4];
int maxNum,minNum;
for(int i=0;i<4;i++){
num[i]=a%10;
a/=10;
}
sort(num,num+4);
minNum=num[0]*1000+num[1]*100+num[2]*10+num[3];
sort(num,num+4,cmp);
maxNum=num[0]*1000+num[1]*100+num[2]*10+num[3];
return maxNum-minNum;
}
int main()
{
int t,x,cnt;
int tag[10000];
cin>>t;
while(t--){
memset(tag,0,sizeof(tag));
cnt=0;
cin>>x;
while(!tag[x]){
tag[x]=1;
x=tranfm(x);
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
1230

被折叠的 条评论
为什么被折叠?



