PTA刷題整理 PAT 乙級 1019 數字黑洞

2021-10-03 15:48:53 字數 2835 閱讀 2206

2020.03.08 今天是三八婦女節喔

給定任乙個各位數字不完全相同的 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:

輸出樣例 1:

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

輸入樣例 2:

輸出樣例 2:

2222 - 2222 = 0000

看到了要對每個數進行排序就很自然的想到了sort()函式,又因為要遞增遞減各一次,就用了vector()容器(這裡要注意的是不能直接用vector + 下標 = 值的形式進行賦值,要利用陣列進行初始化),可以使用rbegin() , rend(),其實直接寫乙個陣列然後寫乙個遞減的比較法則放入sort()函式裡面也是一樣的,使用pow()函式a += temp[i] * pow(10 , temp.size() - i - 1);將每一位還原為乙個四位數,可以好好利用這個i,最後就是最煩人的一步,不足四位數的也要按四位輸出,可以迴圈模1000輸出每一位數

注意:1、當n - n = 0時結束迴圈,迴圈結束條件要加上差為0

2、個人感覺必定有一組資料,**一開始直接給的就是6174,所以需要對6174進行標記,**當第一次進入時為true,進入後則將標記改為false

#include

//輸入輸出流標頭檔案

#include

//標準輸入輸出

#include

#include

//數學函式

#include

//c語言字元陣列的字串

#include

//c++標準模板庫的函式

#include

//map對映容器

#include

//無序的map對映容器

#include

//變長陣列容器

#include

//佇列

#include

//棧#include

//c++string類

#include

//set集合

#define size 4

using

namespace std;

//標準命名空間

//可以加入全域性變數或者其他函式

void

output

(int m)

}int

main()

vector<

int>

temp

(num ,num +4)

;int a =

0, b =0;

sort

(temp.

rbegin()

, temp.

rend()

);for(

int i =

0; i < temp.

size()

; i++

)//cout (temp.

begin()

, temp.

end())

;for

(int j =

0; j < temp.

size()

; j++

)//cout << b << endl;

ans = a - b;

output

(a);

cout <<

" - "

;output

(b);

cout <<

" = "

;output

(ans)

; cout << endl;

}return0;

}

第二種方法是在網上看到的,感覺會比較容易理解

#include

#include

intcomp

(const

void

*a,const

void

*b)int

main()

else

num[0]

=(temp /

1000);

num[1]

= temp /

100%10;

num[2]

= temp /10%

10;num[3]

=(temp %10)

;}}return0;

}

PAT 乙級刷題整理 C C

pat 乙級刷題整理 今天將pat乙級題目整理梳理一下,方便以後查閱瀏覽 均為c c 有一些是以前寫的老 可能比較粗糙,有空會慢慢更新 思路和更簡潔的 1001 害死人不償命的 3n 1 猜想 15分 1002 寫出這個數 20分 1003 我要通過!20分 1004 成績排名 20分 1005 繼...

pat 刷題記錄 pat 乙級 刷題 1002

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。123456789098765432...

PAT乙級刷題A B和C

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 給定區間 2的31次方,2的31次方 內的3個整數a b和c,請判斷a b是否大於c。輸入第1行給出正整數t 10 是測試用例的個數。隨後給出t組測試用例,每組佔一行,順序給出a b和c。整數...