輕鬆周賽賽題 能否被8整除

2021-06-26 21:20:49 字數 1176 閱讀 8124

題幹:給定乙個非負整數,問能否重排它的全部數字,使得重排後的數能被8整除。 輸入格式: 多組資料,每組資料是乙個非負整數。非負整數的位數不超過10000位。 輸出格式 每組資料輸出一行,yes或者no,表示能否重排它的全部數字得到能被8整除的數。注意: 重排可以讓0開頭。

分析:一看題目就發現確實很輕鬆。因為8*125=1000,所以我們只需要考慮最後3位。將1000以內8的倍數打表,只要能讓給定數字中選出3位符合要求就能保證被8整除。

按照給定數字0的個數(int n)來做分類:

(1)n>=3,yes。

(2)n=2,200、400、600、800,只需要再找到任意偶數就返回yes,否則返回no。

(3)n=1,016、024、032、048、056、064、072、088、096……

因為末尾必然是偶數,我們可以選取乙個偶數(int w),再進行分類:

w=0,數論咱不懂,但是倒數第二位顯然不能為奇數,十位是2、6時配奇數,4、8時配偶數。也就是說有2、6時可配任意數。

w!=0,因為200是8的倍數所以只需要考慮200以內的整數,即百位為0或1。因104可被8整除,於是4也可配任意數。2、4、6皆無,僅有8時,只有88可被8整除。因此必須要至少2個8。(當然更多也可以)

總結一下:n=1時,只需要找到2、4、6任意乙個即可確定yes,偶數除乙個0外只有8的話必須要2個以上才是yes,否則no。

(4)n=0,我們同樣根據末尾來分類:

w=2,可選032、072、112、152、192。2的十位配3、7時百位偶數,配1、5、9時百位奇數。

w=4,可選024、064、104、144、184。4的十位配2、6時百位偶數,配0(不可能)、4、8時百位奇數。

w=6,可選016、056、096、136、176。6的十位配1、5、9時百位偶數,配3、7時百位奇數。

w=8,可選008、048、088、128、168。4的十位配0(不可能)、4、8時百位偶數,配2、6時百位奇數。

總結一下:n=0時,找到2,找3、7,有則再找到一偶數yes,否則no;無則找1、5、9找到2次即可yes,否則no。

若無2,找到4,找6,有則再找到一偶數yes,否則no;無則找4、8再找到奇數yes,否則no。

若無4,找到6,找3、7,有則再找到一奇數yes,否則no;無則找1、5、9找到再找6、8有則yes,否則no。

若無6,找到8,再找到2次8則yes,否則no。

CSDN輕鬆周賽賽題 能否被8整除

給定乙個非負整數,問能否重排它的全部數字,使得重排後的數能被8整除。輸入格式 多組資料,每組資料是乙個非負整數。非負整數的位數不超過10000位。輸出格式 每組資料輸出一行,yes或者no,表示能否重排它的全部數字得到能被8整除的數。注意 重排可以讓0開頭。輸入樣例 610122 輸出樣例 yesn...

CSDN 輕鬆周賽賽題 能否被8整除

能否被8整除 給定乙個非負整數,問能否重排它的全部數字,使得重排後的數能被8整除。輸入格式 多組資料,每組資料是乙個非負整數。非負整數的位數不超過10000位。輸出格式 每組資料輸出一行,yes或者no,表示能否重排它的全部數字得到能被8整除的數。注意 重排可以讓0開頭。參考 快速判斷乙個數能否被1...

49周周賽I題

else if a這題本質上不難,但是乙個記憶化搜尋的典型例題,由於在某些情況下,會導致遞迴次數非常多,會爆棧。因此採用記憶化搜尋,記憶化搜尋就是用陣列儲存每一次遞迴時得到的資料,這樣下次遞迴需要這些資料時就不需要重複計算了。這題使用了三維陣列,使得每乙個 a,b,c 分別對應乙個值。同時昨天看了乙...