解题思路:
注意事项:
有源码虽好,不过请多多思考!
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复