給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有「數字黑洞」之稱的 6174,這個神奇的數字也叫 kaprekar 常數。
例如,我們從6767開始,將得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …現給定任意 4 位正整數,請編寫程式演示到達黑洞的過程。
輸入格式:
輸入給出乙個 (0,10
4) 區間內的正整數 n。
輸出格式:
如果 n 的 4 位數字全相等,則在一行內輸出 n - n = 0000;否則將計算的每一步在一行內輸出,直到 6174 作為差出現,輸出格式見樣例。注意每個數字按 4 位數格式輸出。
輸入樣例 1:
6767
輸出樣例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
輸入樣例 2:
2222
輸出樣例 2:
2222 - 2222 = 0000
#include
#include
#include
using
namespace std;
bool
cmp(
char a,
char b)
intmain()
while
(s !=
"6174"
&&s !=
"0000");
return0;
}
思路:
1.需要對字串中進行按順序、逆序排列,用algorithm中的sort函式最為方便,預設為正序。而逆序需要制定cmp規則。
2.另外,需要注意的是將不足4位數的前面補0,可以用到string標頭檔案下的insert函式(這個函式有許多功能這只是其中一種):insert(it,int n,char c)其中it為在字串中欲插入的位置,此函式表示為在it處插入n個字元c.
3.stoi()函式可將字串中轉化為十進位制,這樣可以進行加減運算。
適合初步練習PAT乙級 (1064) 朋友數
如果兩個整數各位數字的和是一樣的,則被稱為是 朋友數 而那個公共的和就是它們的 朋友證號 例如 123 和 51 就是朋友數,因為 1 2 3 5 1 6,而 6 就是它們的朋友證號。給定一些整數,要求你統計一下它們中有多少個不同的朋友證號。輸入格式 輸入第一行給出正整數 n。隨後一行給出 n 個正...
適合初步練習PAT乙級 (1067) 試密碼
當你試圖登入某個系統卻忘了密碼時,系統一般只會允許你嘗試有限多次,當超出允許次數時,賬號就會被鎖死。本題就請你實現這個小功能。輸入格式 輸入在第一行給出乙個密碼 長度不超過 20 的 不包含空格 tab 回車的非空字串 和乙個正整數 n 10 分別是正確的密碼和系統允許嘗試的次數。隨後每行給出乙個以...
適合初步練習PAT乙級 (1015) 德才論
宋代史學家司馬光在 資治通鑑 中有一段著名的 德才論 是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。輸入格式 輸入第一行給出 3 個正整數,分別為 n 10...