算法提高 数字黑洞 C语言
描述:
任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后一定会得到的结果是6174。
比如:4312 3087 8352 6174,经过三次变换,得到6174
输入:
输入描述:
一个四位整数,输入保证四位数字不全相同
输入样例:
4312
输出:
输出描述:
一个整数,表示这个数字经过多少次变换能得到6174
输出样例:
3
提示:
HINT:时间限制:1.0s 内存限制:256.0MB
来源:
蓝桥杯练习系统 ID: 324 原题链接: .page?gpid=T324
#include<stdio.h>
int n=0,a[4];//n用来记录次数,数组a用来分解这个四位数
int f(int x){int y,z,i,j;if(x==6174){//数字为6174时返回n的值 return n;}else{n++;a[0]=x/1000;//把各位上的数字分解a[1]=x/100%10;a[2]=x/10%10;a[3]=x%10;for(i=3;i>=0;i--){//从大到小排序for(j=0;j<i;j++){int t;if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}y=a[0]*1000+a[1]*100+a[2]*10+a[3];//大数z=a[3]*1000+a[2]*100+a[1]*10+a[0];//小数x=y-z;//x则为得到的新四位数f(x);//继续处理}
}
int main(){int x;scanf("%d",&x);printf("%d",f(x));return 0;
}
本文发布于:2024-02-02 11:41:27,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170684529043562.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |