買不到的數目

2021-06-20 22:40:55 字數 1167 閱讀 1626

小明開了一家糖果店。他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。

小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。

你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都可以用4和7組合出來。

本題的要求就是在已知兩個包裝的數量時,求最大不能組合出的數字。

輸入:兩個正整數,表示每種包裝中糖的顆數(都不多於1000)

要求輸出:

乙個正整數,表示最大不能買到的糖數

例如:使用者輸入:

4 7程式應該輸出:

17再例如:

使用者輸入:

3 5程式應該輸出:

7 資源約定:

峰值記憶體消耗 <64m

思路:比如 4 和 7 時,4 和 7 是必勝態, 1, 2, 3, 5, 6 是必敗態,當糖果數大於7時, 每次只需判斷兩種情況即可判斷出它是必勝態還是必敗態:-4 和 -7

之後是必勝還是必敗態,當走到後面的時候,前面這兩種情況一定是已經算好的。

注意:若輸入4 和16, 4 和16之間的數字也有可能能夠組合出來,所以要從輸入的兩個數中最小的開始算。並且每次算之前確保它比要減去的數字大。

開乙個足夠大的陣列,來標記能不能買到的情況,有兩種辦法得出最大不能買到的數目,第一種是從陣列最後乙個元素開始找,找到的第乙個標記為0的點就是最大不能買到的數目。第二種是,在中間做一下標記,若是連續n(假設n是m, n裡較小的那乙個)個都能買到,那以後的就是加上n的整數倍,也就都能買到。這裡把n換成m個也是一樣的。

方法二:

#include#includeint record[10000005];

int main()

if(record[i] == 1)

} else

count = 0; }

return 0;

}

方法一:

#include#includeint record[10000005];

int main() }

for(i = 10000000 - 1; i > max; i--)

printf("%d\n", i);

return 0;

}

買不到的數目

小明開了一家糖果店。他別出心裁 把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都可以用4和7組合出來。本題...

買不到的數目

小明開了一家糖果店。他別出心裁 把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都可以用4和7組合出來。本題...

買不到的數目

小明開了一家糖果店。他別出心裁 把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買10 顆糖。你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都可以用4和7組合出來。本題的...