【NYOJ】[57]6174问题
用的家里的小破笔记本
编译器好像还出了点问题
所以用的在线编译器……
在这里也是分享一下:
Ideone.com
这一题的思路是循环计数直到它和变化之后的数相同
#include<stdio.h>
#include<algorithm>
using namespace std;
int ex(int m) {
int a[4];
a[0]=m/1000;
a[1]=(m/100)%10;
a[2]=(m/10)%10;
a[3]=m%10;
sort(a,a+4);
int sum1=a[3]*1000+a[2]*100+a[1]*10+a[0];
int sum2=a[0]*1000+a[1]*100+a[2]*10+a[3];
return sum1-sum2;
}
int main() {
int T,m;
scanf("%d",&T);
while(T--) {
scanf("%d",&m);
int cnt=0;
while(ex(m)!=m) {
cnt++;
m=ex(m);
}
printf("%d\n",cnt+1);
}
return 0;
}
不过从标程来看
似乎最终总是会变化成6174
不得不说数学还是挺奇妙的
(貌似以前听说过这个规律)
思路还是一样的
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
//freopen("1.txt","r",stdin);
int k;
cin>>k;
while(k--)
{
int n,a[4],n1,n2;
scanf("%d",&n);
int s=1;
while(n!=6174)
{
a[0]=n%10;
a[3]=n/1000;
a[1]=n/10%10;
a[2]=n/100%10;
sort(a,a+4);
n1=1000*a[3]+100*a[2]+10*a[1]+a[0];
n2=1000*a[0]+100*a[1]+10*a[2]+a[3];
n=n1-n2;
s++;
}
printf("%d\n",s);
}
}
题目地址:【NYOJ】[57]6174问题