NYOJ57 6174问题
来源:互联网 发布:守望先锋显示数据 编辑:程序博客网 时间:2024/06/03 10:11
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行每行都写一个各位数字互不相同的四位数 - 输出
- 经过多少次上面描述的操作才能出现循环
- 样例输入
11234
- 样例输出
4
AC代码:
#include<iostream>#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;int cmp1(int a,int b){return a<b;}int cmp2(int a,int b){return a>b;}int main(){int n;while(scanf("%d",&n)!=EOF){while(n--){int m;int i=0,j;scanf("%d",&m);int a[6],x,y,ex;while(true){ i++;ex=m;j=0;x=0;y=0;while(ex!=0){ a[j]=ex%10;ex=ex/10;j++;}sort(a,a+4,cmp2);for(j=0;j<4;j++){x+=a[j]*(int)pow(10,3-j);}sort(a,a+4,cmp1);for(j=0;j<4;j++){y+=a[j]*(int)pow(10,3-j);}x=x-y;if(x==m){printf("%d\n",i);break;}else {m=x;}}}}return 0;}
最优代码:#include<iostream>#include<algorithm>#include<stdio.h>using namespace std;int main(){//freopen("1.txt","r",stdin);int k;cin>>k;while(k--){int n,a[4],n1,n2;scanf("%d",&n);int s=1;while(n!=6174){a[0]=n%10;a[3]=n/1000;a[1]=n/10%10;a[2]=n/100%10;sort(a,a+4);n1=1000*a[3]+100*a[2]+10*a[1]+a[0];n2=1000*a[0]+100*a[1]+10*a[2]+a[3];n=n1-n2;s++;}printf("%d\n",s);}}
- NYOJ57 6174问题
- nyoj57 6174问题
- NYOJ57题6174问题
- nyoj57 6174问题
- nyoj57(6174问题)
- 6174问题(nyoj57)
- nyoj57--6174问题
- nyoj57 6147问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- 6174问题
- hdoj 2072 单词数
- setupUI(this)是什么意思?什么用??
- Fiddler 教程
- 在URL中去除指定参数的代码
- hdu 2574 A Game with Marbles
- NYOJ57 6174问题
- 偶然发现的VS2010的调试Watch查看也有F11的调试功能
- hdu4432
- weblogic_11g集群部署_linux
- 解决当tomcat非正常关闭后,重新启动时提示端口号被占用问题
- ORA-01157与ORA-01110错误以及删除数据文件后数据字典中仍然存在问题
- hdu 1222 最大公约数
- J2EE的十三个规范
- 简单操作文件