藍橋杯真題 買不到的數目

2021-10-03 08:29:50 字數 2525 閱讀 4699

問題描述

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

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

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

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

輸入格式

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

輸出格式

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

樣例輸入1

4 7樣例輸出1

17樣例輸入2

3 5樣例輸出2

7我的思路

倘若輸入資料分別為 i j

這個買不到的數 範圍 大於最小值 小於公倍數

首先找出最小公約數

然後兩數相乘除以最小公約數=最小公倍數

然後將這個範圍的數存入列表list1

然後根據最小公倍數,極限估計 求出 ,在公倍數裡,有多少個 i或j。

然後據此拼湊 可能出現的值 count=iki+jkj

然後通過 count必須小於最小公倍數 ,篩選出 在買不到數範圍裡的值,並存入list2

然後通過差集,篩選出 list1裡有的值,list2沒有的值,即為所求。

上**:

#得到最小公倍數

defget_gbs

(i,j)

: i=i

j=j#得到最小公約數

while i!=j:

if i>j:

i=i-j

else

: j=j-i

gbs=

int(i*j/i)

return gbs

#得到i j 較小的值

defget_min

(i,j)

:if i>j:

min=j

else

:min

=i return

min#得到在公倍數範圍裡 ki表示最多有多少個i

defget_ki

(i,j)

: gbs=get_gbs(i,j)

ki=1while

true

:if ki*i

ki=ki+

1else

: ki = ki -

1break

return ki

##得到在公倍數範圍裡 ki表示最多有多少個j

defget_kj

(i,j)

: gbs = get_gbs(i, j)

kj =

1while

true

:if kj * j < gbs:

kj = kj +

1else

: kj = kj -

1break

return kj

#得到買不到的數目

defget_getnonum

(i,j)

:min

=get_min(i,j)

gbs=get_gbs(i,j)

ki=get_ki(i,j)

kj=get_kj(i,j)

list1=

list2=

for l in

range

(min+1

,gbs)

:for a in

range

(ki+1)

:for b in

range

(kj+1)

: count=a*i+b*j

if count

# print(a, b)

# print(ki)

# print(kj)

print

(list1)

print

(list2)

#差集,list1裡有的數而list2無的數

temp=

list

(set

(list1)

.difference(

set(list2)))

#在這個數列 求最右邊的值 即最大

買不到的數目 藍橋杯

買不到的數目 藍橋杯 這是2013 年第四屆藍橋杯全國軟體大賽預賽a組 c c 組 第8 題,為程式設計題,本文提供了兩種解法。小明開了一家糖果店。他別出心裁 把水果糖包成 4顆一包和 7顆一包的兩種。糖果不能拆包賣。小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如...

藍橋杯 買不到的數目

題目關鍵點分析 比如輸入為4和7,那麼只要出現至少連續的4個數可以被4和7組合出來,那麼後面的數字一定都可以被4和7組合出來。證明 比如18 19 20 21都是可以被4和7組合出來的,那麼後面的數都可以被4和7組合出來,比如22,就相當於18 4,既然18可以被4和7組合出來,那麼18 4即22也...

藍橋杯 買不到的數目

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