PAT乙級 Basic Level 練習題 有假幣

2021-10-03 13:46:05 字數 2026 閱讀 5938

題目描述

居然有假幣! 現在豬肉漲了,但是農民的工資卻不見漲啊,沒錢怎麼買豬肉啊。nowcoder這就去買豬肉,結果找來的零錢中有假幣!!!可惜nowcoder一不小心把它混進了一堆真幣裡面去了。只知道假幣的重量比真幣的質量要輕,給你乙個天平(天平兩端能容納無限個硬幣),請用最快的時間把那個可惡的假幣找出來。

輸入描述:

1≤n≤2^30,輸入0結束程式。

輸出描述:

最多要稱幾次一定能把那個假幣找出來?

輸入例子:

3

120

輸出例子:

1

3

解題思

路:\color解題思路:

解題思路

:一看到這道題,我首先想到的是乙個猜數遊戲,就是隨機生成[1,1000]之間的乙個數,你每次報出乙個猜想值,只告訴你你猜的數是比隨機數大還是小,每次根據反饋調整猜的數值,直到猜中為止。玩過的都知道,折半查詢是最快的,比如將[1,1000]分為[1,500]、[500,1000],第一次猜500,如果大了就猜250,否則猜750。這樣按照折半的規則猜,最多需要 log2n向上取整 次。

對於這道題,我一開始的思路也是折半查詢,把n分成兩堆,如果n不是偶數,就分成(n - 1) / 2。但這種思路並不是最優的,無法通過所有測試。

我們首先來看前面幾個示例:

當n =

1時,不需要再稱了,它就是假幣,總共需要0次

當n =

2時,1、1放天平兩端,輕的就是假幣,總共需要1次

當n =

3時,隨機抽出2個放到天平兩端,如果天平平衡,則剩下1個就是假幣,

否則天平中較輕的是假幣,總共需要1次

當n =

4時,分成1、1、2,天平秤1、1,注意題目要求最短時間,

並且是次數最大的情況,也就是我們需要考慮最壞的情況,第一次1、1重量相等,

接著我們把2分開稱,總共需要2次

當n =

5時,分成2、2、1,天平秤2、2,同樣考慮最壞的情況,2、2重量相等,

接著我們把2分開稱,總共需要2次

當n =

6時,分成2、2、2,天平秤2、2,同樣考慮最壞的情況,不管如何,還需要

把2分開稱,總共需要2次

當n =

7時,分成2、2、3,天平先稱2、2,考慮最壞的情況,重量相等,接著我們就需要

按照n =

3的最優情況稱,總共需要2次..

.其中有乙個規則,我們每次把n分成是3堆,

如果n %3==

0,分成 n/

3、 n/

3、 n/

3三堆, 剩下 n/

3 如果n %3==

1,分成 n/

3、 n/

3、1+

(n/3

)三堆,最壞剩下 1

+(n/3)

如果n %3==

2,分成 n/

3、 1

+(n/

3)、1

+(n/

3)三堆,最壞剩下 1

+(n/

3)

程式碼實

現:\color**實現:

**實現

PAT乙級 Basic Level 真題

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

PAT乙級 Basic Level 真題1003

題目描述 令pi表示第i個素數。現任給兩個正整數m n 10000,請輸出pm到pn的所有素數。輸入描述 輸入在一行中給出m和n,其間以空格分隔。輸出描述 輸出從pm到pn的所有素數,每10個數字佔1行,其間以空格分隔,但行末不得有多餘空格。輸入例子 5 27 輸出例子 11 13 17 19 23...

PAT乙級 Basic Level 練習題 採花生

題目描述 魯賓遜先生有乙隻寵物猴,名叫多多。這天,他們兩個正沿著鄉間小路散步,突然發現路邊的告示牌上貼著一張小小的紙條 歡迎免費品嚐我種的花生!熊字 魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格。有經驗的多多一眼就能看出,每棵花生...