6174问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
- 输入
- 第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数 输出 - 经过多少次上面描述的操作才能出现循环 样例输入
1 1234
样例输出
4
这个问题的思路也比较清晰,只要写的时候把次序用好就行!嘻嘻嘻一次就ac了。
#include<stdio.h> int main() { int max(int m); int n,m; scanf("%d",&n); while(n--) { int s=0; scanf("%d",&m); while(m!=6174) { m=max(m); s++; } printf("%d\n",s+1); } return 0; } int max(int m) { int i=0,temp,a[10]; while(m) { a[i]=m%10; m=m/10; i++; } for(int j=0;j<i-1;j++) { for(int k=0;k<i-1-j;k++) { if(a[k]<a[k+1]) { temp=a[k]; a[k]=a[k+1]; a[k+1]=temp; } } } int x=0,y=0; for(int j=0;j<i;j++) { x=x*10+a[j]; y=y*10+a[i-1-j]; } return x-y; }
- 第一行输入n,代表有n组测试数据。
本文介绍了一个有趣的数学问题——6174问题,并提供了一段C语言代码实现。该程序通过输入一个四位数开始迭代计算,直到找到循环点6174,输出达到循环所需的步数。
460

被折叠的 条评论
为什么被折叠?



