【南理oj】57 - 6174问题(水)
2016-01-06 13:40
225 查看
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
来源[张洁烽]原创
上传者张洁烽
本题不难,代码如下:
#include<stdio.h> int main() { int n; scanf("%d",&n); while(n--) { int m,i,a,b,c,d,x=1,k; scanf("%d",&m); while(1) { a=m%10; b=m/10%10; c=m/100%10; d=m/1000; if(a<b) { i=a; a=b; b=i; } if(a<c) { i=a; a=c; c=i; } if(a<d) { i=a; a=d; d=i; } if(b<c) { i=b; b=c; c=i; } if(b<d) { i=b; b=d; d=i; } if(c<d) { i=c; c=d; d=i; } k=(a*1000+b*100+c*10+d)-(d*1000+c*100+b*10+a); if(m==k) { printf("%d\n",x); break; } else { m=k; x++; } } } return 0; }
相关文章推荐
- 程序员的最高境界:呆若木鸡
- Minecraft Forge编程入门一 “环境搭建”
- eclipse 技巧
- MySQL: 改变Homebrew安装MySQL/MariaDB的数据库文件目录
- java 计算地球上两点间距离
- UIAlertView的简单用法
- C#之MD5加密
- c#的数据类型
- html 中内容的堆叠顺序 设置
- Debug宏
- 微信公众平台开发--订阅、文本、单图文回复
- Oracle正则表达式函数
- oracle创建表空间和用户
- java保留两位小数
- Struts2中Action接收参数的方法
- 一周大事件:玩我的世界开公司
- Android:下拉列表Spinner(二)
- iOS事件拦截(实现触摸任意位置隐藏指定view)
- C#学习超市系统之超市商品
- Xcode使用第三方库-Cocoapods