題目連接
個人覺得,數學好的人看這道題感覺會特別簡單
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