【题意简述】:6174问题,就是输入一个四位数,将数字从大到小的排序结果,减去从小到大的排序结果,得到的结果再重复上述操作!直到得到的值是0,或者6174,便结束!(其中还有一些细小的叙述,参见题目。)
【思路】:没有难度,思路很好建立,最重要的是看懂题意,按照题意要求控制输入输出,我就栽在这里了,因为没有注意一定要输入四位,导致我一直OLE。
还有就是,在这里边有的语言知识就是sprintf,和printf不同之处就是printf是将内容输出至显示器,而sprintf是将内容输出到字符串中,sscanf同理,我就不再赘述,详细的可以看看语法书。
详见代码:
// 236K 0Ms #include<iostream> using namespace std; #include<cstdio> #include<cstring> int a,b; int get_next(int x) { int n; char s[10]; sprintf(s, "%d", x); n = strlen(s); //冒泡排序! for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) if(s[i] > s[j]) { char t = s[i]; s[i] = s[j]; s[j] = t; } sscanf(s, "%d", &b);//将得到的结果转化为整型后储存在b中! // 反转! for(int i = 0; i < n/2; i++) { char t = s[i]; s[i] = s[n-1-i]; s[n-1-i] = t; } sscanf(s, "%d", &a); return a - b; } int main() { int n,t; int count; while(cin>>n) { if(n == -1) break; count = 1; cout<<"N="<<n<<":"<<endl; if(n%1111 == 0||n>9999||n<1000) //!!注意这里输入必须是4位,否则就会 OLE!! { cout<<"No!!"<<endl; continue; } for(;;) { t = get_next(n); cout<<a<<"-"<<b<<"="<<t<<endl; if(t == 6174||t == 0) { cout<<"Ok!! "<<count<<" times"<<endl; break; } count++; n = t; } } return 0; }
POJ 1350 Cabric Number Problem (6174问题)水题,布布扣,bubuko.com
POJ 1350 Cabric Number Problem (6174问题)水题
原文:http://blog.csdn.net/u013749862/article/details/22476787