题目连接
个人觉得,数学好的人看这道题感觉会特别简单
AC代码
#include<stdio.h>
int qunum(int n)
{//得到二数大的与小的之差
int a[4],a1,a2,i,j,t,e1,e2;
for(i=0;i<4;i++)
{
a[i]=n%10;
n=n/10;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
a1=a2=0;
e1=1000;
e2=1;
for(i=0;i<4;i++)
{
a1=a[i]*e1+a1;//a1大的数
a2=a[i]*e2+a2;//a2小的数
e1=e1/10;
e2=e2*10;
}
return a1-a2;
}
int main()
{
int T,n,count,b[100],i,flag;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
count=0;
flag=0;
while(1)
{
b[count]=qunum(n);
n=b[count];
for(i=0;i<count;i++)
if(n==b[i]) flag=1
count++;
if(flag) break;
}
printf("%d\n",count);
}
return 0;
}
优秀代码
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
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);
}
}
看了优秀的代码根本不在一个水平线上。不过刚开始没弄明白为啥while循环终止条件是6174 自己当时认为这里面肯定有着某种规律 就去百度了 果然有关于6174的猜想 简单的说就是无论多大的四位数, 只要四个数字不全相同,最多进行7次变换,就会出现四位数6174 具体的见百度百科,链接如下
6174