2023年第五屆藍橋杯省賽C語言B組

2021-10-08 22:53:26 字數 3262 閱讀 4527

1.啤酒和飲料

思路:有手就行

#include

using

namespace std;

intmain()

答案:11

2.切麵條

思路:自己畫一畫,前幾個是這樣的:

對折次數

得到麵條數目

02=2 0+1

13=21+1

25=22+1

39=23+1

417=24+1……

n2n+1

這個是找規律的

#include

#include

using

namespace std;

intmain()

答案:1025

3.李白打酒

思路:同2023年的「第三十九級台階」:

#include

using

namespace std;

int ans=0;

void

fun(

int wine,

int shop,

int flower)

//這裡兩種情況要分類,注意if語句的判斷

if(shop>0)

fun(wine*

2,shop-

1,flower);if

(flower>0)

fun(wine-

1,shop,flower-1)

;}intmain()

答案:14

4.史豐收運算

思路:沒啥思路

看到while語句裡的條件是r==0,內部裡面第乙個if語句裡是r<0

那麼下面肯定也是個if語句,並且條件是r>0,這個應該不難猜到

然後後面的執行語句肯定和i有關,不然迴圈出不去,然後不可能和上一句一樣,也是i+1,就沒意義了。試著試著就出來了。

for

(i=5

; i>=

0; i--

)}

答案:if(r>0) return i

5.列印圖形

思路:這個似乎也是試出來的

要填第一行,我先是用rank=3帶進去分別注釋掉第二行和第三行,結果都是最後一行**有變化,說明要我們補全的第一行肯定是上方的空白部分

那整體格式就是f(a, rank-1, ,);

後面兩個值就一邊試一邊看執行結果,然後修改。

voidf(

char a[

][n]

,int rank,

int row,

int col)

int w =1;

int i;

for(i=

0; i

1; i++

) w *=2

;f(a, rank-

1, row, col+w/2)

;//上邊的幾層 填空處 @ 第一行

f(a, rank-

1, row+w/

2, col)

;//最左邊的一顆 @ 第二行

f(a, rank-

1, row+w/

2, col+w)

;//最右邊的一顆 @ 第三行

}

答案:f(a, rank-1, row, col+w/2)

6.奇怪的分式

思路:可以暴力列舉加以判斷,可以深搜再判斷。

注意: 但對於分子分母相同的情況,2/2 乘以 3/3 這樣的型別太多了,不在計數之列!

#include

#include

using

namespace std;

int ans=0;

int a[9]

=;void

dfs(

int n)

for(

int i=

0; i<9;

++i)

}int

main()

答案:14

7.六角填數

思路:這是一道典型的深搜題目。

坑點是你需要給出的陣列要去除題目已經給到的,數字1 3 8 都是不能再次出現的

一道題目是無法明白深搜的,需要自己多看多練

#include

#include

using

namespace std;

int num[9]

=;bool vis[9]

=;int a[10]

;bool

isok()

}void

dfs(

int n)

}int

main()

答案:10

8.螞蟻感冒

起初想到的是把這些數字取絕對值放在另乙個陣列裡,然後sort一下,標記第乙個感冒的螞蟻的位置,然後解決正負的方向,就有點昏了,主要是沒想到「穿過**」。

參考了思路:螞蟻相遇傳染感冒,同時兩個都掉頭,此時兩個都感冒。

這裡的相遇掉頭其實是穿過,因為兩個都感冒了,不再區分哪個螞蟻往哪邊走 。

總的螞蟻感冒數=左邊向右的螞蟻+右邊向左的螞蟻+本身

特殊情況 :

第一只螞蟻向左,並且它的左邊沒有向右的。

第一只螞蟻向右,並且它的右邊沒有向左的。

這兩種情況任意發生一種都會導致第乙個螞蟻無法將感冒傳給其他螞蟻

#include

#include

using

namespace std;

int a[50]

;//存放螞蟻位置的陣列

int n;

intmain()

if(a[i]

<0)

}//處理特殊情況if(

(a[0

]<

0&&right==0)

||(a[0]

>

0&&left==0)

) cout<<

"1";

else cout<

return0;

}

後面不會了,,,,

2023年第五屆藍橋杯C 省賽B組J題

n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3 依次類推...

史豐收速算 第五屆藍橋杯省賽

史豐收速演算法的革命性貢獻是 從高位算起,進製。不需要九九表,徹底顛覆了傳統手算 速算的核心基礎是 1位數乘以多位數的乘法。其中,乘以7是最複雜的,就以它為例。因為,1 7 是個迴圈小數 0.142857 如果多位數超過 142857 就要進1 同理,2 7,3 7,6 7 也都是類似的迴圈小數,多...

奇怪的分式 第五屆藍橋杯省賽

上小學的時候,小明經常自己發明新演算法。一次,老師出的題目是 1 4 乘以 8 5 小明居然把分子拼接在一起,分母拼接在一起,答案是 18 45 參見圖1.png 老師剛想批評他,轉念一想,這個答案湊巧也對啊,真是見鬼!對於分子 分母都是 1 9 中的一位數的情況,還有哪些算式可以這樣計算呢?請寫出...