第八屆藍橋杯省賽(包子湊數)

2021-08-17 03:12:47 字數 1489 閱讀 9058

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有n種蒸籠,其中第i種蒸籠恰好能放ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。

每當有顧客想買x個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有x個包子。比如一共有3種蒸籠,分別能放3、4和5個包子。當顧客想買11個包子時,大叔就會選2籠3個的再加1籠5個的(也可能選出1籠3個的再加2籠4個的)。

當然有時包子大叔無論如何也湊不出顧客想買的數量。比如一共有3種蒸籠,分別能放4、5和6個包子。而顧客想買7個包子時,大叔就湊不出來了。

小明想知道一共有多少種數目是包子大叔湊不出來的。

第一行包含乙個整數n。(1 <= n <= 100)

以下n行每行包含乙個整數ai。(1 <= ai <= 100)

乙個整數代表答案。如果湊不出的數目有無限多個,輸出inf。

例如,

輸入:

2 4

5 程式應該輸出:

6 再例如,

輸入:

2 4

6 程式應該輸出:

inf樣例解釋:

對於樣例1,湊不出的數目包括:1, 2, 3, 6, 7, 11。

對於樣例2,所有奇數都湊不出來,所以有無限多個。

先分析結果為無限多的情況

第一種情況:當輸入的數都為偶數時,他的和得不到奇數。

第二種情況:所有數的公約數都不為1,任意兩個數的公約數都不是1;

在寫程式的時候兩種情況一塊寫,因為第一種情況是第二種的特例!!

再來分析有限個的情況:

有限個有乙個上限,當超過這個上限的數後,後邊的數都能夠湊出,所以只需要考慮上限以下的數,用陣列標記,能湊出的記1,否則為0。當某個數能夠湊出,那麼用nai+上這個數都能得到。

#include

#include

#include

using

namespace

std;

int dp[10001];

int judge(int x,int y)

int main()

if(a[0]1])

swap(a[0],a[1]);

int ans=judge(a[0],a[1]);

if(ans==1) k2=1;

for(int i=2;iif(a[i]if(judge(a[i],ans)==1)

k2=1;

}if(k2!=1) //公約數不為一的情況

memset(dp,0,sizeof(dp));

dp[0]=1;

for(int i=0;ifor(int j=0;j<10000;j++)

int t=0;

for(int i=0;i<10000;i++)

printf("%d\n",t); //有公約數為一的情況

return

0;}

第八屆藍橋杯省賽C B組 包子湊數

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有n種蒸籠,其中第i種蒸籠恰好能放ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。每當有顧客想買x個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有x個包子。比如一共有3種蒸籠,分別能放3 4和5個包子。當顧客想買11個...

第八屆藍橋杯第八題包子湊數

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有n種蒸籠,其中第i種蒸籠恰好能放ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。每當有顧客想買x個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有x個包子。比如一共有3種蒸籠,分別能放3 4和5個包子。當顧客想買11個...

藍橋杯第八屆省賽

第4題 6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。圖的dfs 按照兩...