链接:http://www.nowcoder.com/pat/6/problem/4045
题目描述
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入描述:
输入给出一个(0, 10000)区间内的正整数N。
输出描述:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例。注意每个数字按4位数格 式输出。
输入例子:
6767
输出例子:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
1 #include "iostream" 2 #include <iomanip> 3 #include <string.h> 4 #include <string> 5 #include <vector> 6 #include <cmath> 7 #include <cctype> 8 #include <algorithm> 9 using namespace std; 10 11 int num[4]; 12 bool cmp1(int a, int b) {return a > b;} 13 bool cmp2(int a, int b) {return a < b;} 14 void fenlie(int a) 15 { 16 for(int i=0; i<4; ++i) 17 { 18 num[i] = a%10; 19 a /= 10; 20 } 21 } 22 int hebing() 23 { 24 int a = 0; 25 for(int i=0; i<4; ++i) 26 { 27 a = a*10+num[i]; 28 } 29 return a; 30 } 31 void solve(int a) 32 { 33 fenlie(a); 34 sort(num, num+4, cmp1); 35 for(int i=0; i<4; ++i) {cout <<num[i];} 36 cout <<" - "; 37 int t1 = hebing(); 38 sort(num, num+4, cmp2); 39 for(int i=0; i<4; ++i) {cout <<num[i];} 40 cout <<" = "; 41 int t2 = hebing(); 42 a = t1-t2; 43 fenlie(a); 44 for(int i=3; i>=0; --i) {cout <<num[i];} 45 cout <<endl; 46 while(a != 6174) 47 { 48 fenlie(a); 49 sort(num, num+4, cmp1); 50 for(int i=0; i<4; ++i) {cout <<num[i];} 51 cout <<" - "; 52 t1 = hebing(); 53 sort(num, num+4, cmp2); 54 for(int i=0; i<4; ++i) {cout <<num[i];} 55 cout <<" = "; 56 t2 = hebing(); 57 a = t1-t2; 58 fenlie(a); 59 for(int i=3; i>=0; --i) {cout <<num[i];} 60 cout <<endl; 61 } 62 } 63 int main() 64 { 65 int a; 66 cin >>a; 67 fenlie(a); 68 int e = 0; 69 for(int i=1; i<4; ++i) 70 { 71 if(num[i] == num[i-1]){ ++e;} 72 } 73 if(e == 3) 74 { 75 cout <<a <<" - " <<a <<" = " <<"0000" <<endl; 76 } 77 else 78 { 79 solve(a); 80 } 81 return 0; 82 }
当输入20时,结果:
当输入3333时,结果:
时间: 2024-12-17 18:28:11