解题思路:
注意事项:
有源码虽好,不过请多多思考!
参考代码:
#include<stdio.h>
/* sort1()用来形成最小四位数的排序,sort2形成最大;
getnum()用来返回这个新四位数,也就是max与min的差值
主函数写个死循环,当等于6174用break跳出;*/
void sort1(int a[])
{
int i,j,k,temp;
for(i=1;i<4;i++)
{
k=i;
for(j=i+1;j<=4;j++)
{
if(a[k]>a[j])
{
k=j;
}
}
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
void sort2(int a[])
{
int i,j,k,temp;
for(i=1;i<4;i++)
{
k=i;
for(j=i+1;j<=4;j++)
{
if(a[k]>a[j])
{
k=j;
}
}
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
int getnum(int n)
{
int a[5],min,max;
a[1]=n/1000;
a[2]=n/100%10;
a[3]=n/10%10;
a[4]=n%10;
sort1(a);
min=a[1]*1000+a[2]*100+a[3]*10+a[4]; //数组记录各个位上的数字,乘以位数就得出这个数
sort2(a);
max=a[1]*1000+a[2]*100+a[3]*10+a[4];
n=max-min; //n新4位数
a[1]=n/1000; //别忘啦把新4位数各个位输入数组中
a[2]=n/100%10;
a[3]=n/10%10;
a[4]=n%10;
return n; //返回新四位数
}
int main()
{
int n,i=0,m;
int a[5];
scanf("%d",&n);
while(1)
{
i++; //计数器i记录次数
n=getnum(n); //这里要n就是new,一个新四位数,先调用然后把返回值赋值给n,否则会死循环,
if(n==6174) //因为n值没改变
{
break;
}
}
printf("%d",i);
return 0;
}
0.0分
0 人评分
简单的a+b (C语言代码)浏览:690 |
简单的a+b (C语言代码)浏览:720 |
计算质因子 (C++代码)浏览:1828 |
WU-蓝桥杯算法提高VIP-勾股数 (C++代码)浏览:1685 |
矩形面积交 (C++代码)浏览:1205 |
川哥的吩咐 (C语言代码)浏览:663 |
C语言训练-大、小写问题 (C语言代码)浏览:719 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:725 |
简单的a+b (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:653 |