給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有「數字黑洞」之稱的6174
,這個神奇的數字也叫 kaprekar 常數。
例如,我們從6767
開始,將得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
現給定任意 4 位正整數,請編寫程式演示到達黑洞的過程。
輸入給出乙個 (0,104) 區間內的正整數 n。
如果 n 的 4 位數字全相等,則在一行內輸出n - n = 0000
;否則將計算的每一步在一行內輸出,直到6174
作為差出現,輸出格式見樣例。注意每個數字按4
位數格式輸出。
6767
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
2222
2222 - 2222 = 0000
這題和【藍橋杯】adv-170 數字黑洞
還有【pat甲級】the black hole of numbers
類似。分三步走吧,第一步:將輸入的數字按照各十百千位拆分成四個數字,將這個數字放入乙個陣列中;第二步:將陣列中的數字公升序排列、降序排列分別組合成最小的數字和最大的數字;第三步:用最大的數字減去最小的數字,然後重複第二步直到得到6174為止。若第一步中輸入的那個數字個十百千位都相等,差值就直接輸出0000。
#include using namespace std;
int arr2num(int a) //把陣列裡的數按照下標次序來組成乙個新的數字
return n;
}int main()
sort(a,a+4); //公升序排列
int x = arr2num(a); //得到由陣列a中元素組成的最大數字
sort(a,a+4,greater()); //降序排列
int y = arr2num(a); //得到由陣列a中元素組成的最小數字
n = y-x; //作差得到乙個新的四位數
printf("%04d - %04d = %04d\n",y,x,n);
}while(n!=0 && n!=6174);
return 0;
}
PAT乙級數字黑洞 20
題目描述 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到 乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 7766 6...
PAT 乙級 1019 數字黑洞
例如,我們從6767開始,將得到 7766 6677 1089 9810 0189 9621 9621 1269 8352 8532 2358 6174 7641 1467 6174 現給定任意4位正整數,請編寫程式演示到達黑洞的過程。輸入格式 輸入給出乙個 0,10000 區間內的正整數n。輸出格...
PAT乙級 1019 數字黑洞
給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 7766 6677 10...