小明開了一家糖果店。他別出心裁:把水果糖包成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組合出來。本題的...