啊哈!初次知道6174,还是在高中时,一本科普书上讲的。作为回忆,就把这道题AC了。
水题,不过去掉下面的注释,可以很直观的看到过程。
最后!!!为什么我用memset函数总是忘写#include<cstring>头文件!!!
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
1 1234
4
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int ans[4]; bool cmp(int lhs, int rhs) { return lhs>rhs; } int mysort(int x,int s) { int i,j; memset(ans,0,sizeof(ans)); for(i=0,j=10000;i<4;i++) { j/=10; ans[i]=x/j%10; } if(s) sort(ans,ans+4,cmp); else sort(ans,ans+4); /* for(i=0;i<4;i++) cout<<ans[i]<<" "; cout<<endl; */ x=0; for(i=0,j=10000;i<4;i++) { j/=10; x+=ans[i]*j; } return x; } int main() { int n,m,lhs,rhs,tmd; cin>>n; while(n--) { cin>>m; tmd=1; while(m!=6174) { lhs=mysort(m,0); //升序 rhs=mysort(m,1); //降序 m=rhs-lhs; ++tmd; } cout<<tmd<<endl; } return 0; }
原文地址:http://blog.csdn.net/u011694809/article/details/46444563