-
描述
-
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到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
来源
思路:一个自定义函数没什么,之前竟然有看错了题目。近视误人昂。
参考代码:
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #define MYDD 110300 using namespace std; int hw(int x) { int wqs[5],a,b; a=b=0; wqs[0]=x/1000;//万位 4561 wqs[1]=(x%1000)/100;//千位 wqs[2]=(x%100)/10;//十位 wqs[3]=x%10;//个位 sort(wqs,wqs+4); for(int j=0; j<4; j++) { a+=wqs[j]*pow(10,j);//位数从大到小 b+=wqs[j]*pow(10,3-j);//位数从小到大 } return a-b; } int main() { int N,a,ans;//ans统计操作次数 scanf("%d",&N); while(N--) { ans=0; scanf("%d",&a); while(a!=hw(a)) { a=hw(a); ans++; } printf("%d\n",ans+1); } return 0; } //例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!
-
第一行输入n,代表有n组测试数据。
NYOJ 57 6174问题
最新推荐文章于 2024-05-26 19:58:42 发布