nyoj57 6174问题
2014-05-26 12:16
246 查看
题目57
题目信息
运行结果
本题排行
讨论区
接下来n行每行都写一个各位数字互不相同的四位数输出经过多少次上面描述的操作才能出现循环样例输入
代码
题目信息
运行结果
本题排行
讨论区
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来源[张洁烽]原创上传者张洁烽
代码
查看代码---运行号:719473----结果:Accepted
运行时间:2014-02-11 03:03:23 | 运行人:shengweisong#include<stdio.h> int main() { int i, j, n, m, a[4], b, c; scanf( "%d", &n ); while( n-- ){ scanf( "%d",&m ); /*a[1] = m%10; m /=10; a[2] = m%10; m /=10; a[3] = m%10;*/ int y = 1; while( m!=6174 ){ for( i =0; i <4; i++){ a[i] = m%10; m /=10; } for( i =0; i <4; i++ ) for( j =i; j <4; j ++ ) if( a[i] <a[j] ){ /*因为中间的这一个“<”没有记熟 浪费了将近2个小时 记住教训 int s = a[j]; a[j] = a[i]; a[i] = s; } c = a[0]*1000+a[1]*100+a[2]*10+a[3]; b = a[3]*1000+a[2]*100+a[1]*10+a[0]; m = c-b; y ++; } printf( "%d\n", y ); } return 0; } 感想:看题要认真, 在做提前要调整好最佳状态 要有答题思路 再编码 把一些常用的代码记熟 记住教训啊!!!
相关文章推荐
- nyoj题目57:6174问题
- NYOJ-57:6174问题
- nyoj_57 6174问题
- nyoj 57 6174问题
- NYOJ-57 6174问题
- NYOJ 57(6174问题)
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- NYOJ:题目57 6174问题
- NYOJ 57 6174问题
- NYOJ57 6174问题
- NYOJ-57-6174问题-2013年6月29日11:28:02
- NYOJ-6174问题-57
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- [原]NYOJ-6174问题-57
- NYOJ-57-6174问题-2013年6月29日11:58:06
- NYOJ 57 6174问题
- nyoj 57 6174问题