2023年藍橋別A組模擬訓練

2022-05-02 04:12:09 字數 4901 閱讀 4118

**:

#include #define ff(a,b) for(a=0;a#define f(a,b,c) for(a=b;a#define o printf

#define i scanf

#define max (1<<30)+1

#define len 1010

using

namespace

std;

int ans=0

;bool isok(intx)}

intmain()

結果:7

30,3

41,14

52,25

63,36

74,47

85,58

96,69

7--------------------------------process exited after

0.5086 seconds with return value 0

請按任意鍵繼續. . .

用時:3min

某君從某年開始每年都舉辦一次生日party,並且每次都要吹熄與年齡相同根數的蠟燭。 現在算起來,他一共吹熄了236根蠟燭。

請問,他從多少歲開始過生日party的?

請填寫他開始過生日party的年齡數。

注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。

**:

#include #define ff(a,b) for(a=0;a#define f(a,b,c) for(a=b;a#define o printf

#define i scanf

#define max (1<<30)+1

#define len 1010

using

namespace

std;

intmain()

結果:26

26歲開始,過了8年

--------------------------------process exited after

0.5775 seconds with return value 0

請按任意鍵繼續. . .

用時:5min

如下的10個格仔

填入0~9的數字。要求:連續的兩個數字不能相鄰。 (左右、上下、對角都算相鄰)

一共有多少種可能的填數方案?

請填寫表示方案數目的整數。

注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。

**:(強行全排列後判斷)

#include #include 

#include

#include

#define ff(a,b) for(a=0;a#define f(a,b,c) for(a=b;a#define o printf

#define i scanf

#define max (1<<30)+1

#define len 1010

using

namespace

std;

int ans=0

;int p[12]=;

void

judge()

}ff(i,

2) }

ff(i,

2) }

ff(i,

2) }

ans++;

}int

main()

while(next_permutation(p+1,p+11

)); cout

return0;

}

結果:1580

1580

--------------------------------process exited after

0.7154 seconds with return value 0

請按任意鍵繼續. . .

用時:約30min

排序在各種場合經常被用到。 快速排序是十分常用的高效率的演算法。

其思想是:先選乙個「標尺」, 用它把整個佇列過一遍篩子,

以保證:其左邊的元素都不大於它,其右邊的元素都不小於它。

這樣,排序問題就被分割為兩個子區間。 再分別對子區間排序就可以了。

下面的**是一種實現,請分析並填寫劃線部分缺少的**。

#include void swap(int a, int i, int

j)int partition(int a, int p, int

r) ______________________;

returnj;}

void quicksort(int a, int p, intr)}

intmain()

;

int n = 12

; quicksort(a,

0, n-1

);

for(i=0; i"

%d "

, a[i]);

printf("\n

");return0;

}

填寫:

swap(a,j,p)

下面的**把乙個整數的二進位制表示的最右邊的連續的1全部變成0

如果最後一位是0,則原數字保持不變。

如果採用**中的測試資料,應該輸出:

00000000000000000000000001100111  -> 00000000000000000000000001100000

00000000000000000000000000001100 -> 00000000000000000000000000001100

請仔細閱讀程式,填寫劃線部分缺少的**。

#include void f(int

x) int

main()

我的答案是 (-(~x))&x

標準答案是x&(x+1)

現在小學的數學題目也不是那麼好玩的。

看看這個寒假作業:

□ + □ = □

□ - □ = □

□ × □ = □

□ ÷ □ = □

每個方塊代表1~13中的某乙個數字,但不能重複。

比如:

6 + 7 = 13

9 - 8 = 1

3 * 4 = 12

10 / 2 = 5

以及:

7 + 6 = 13

9 - 8 = 1

3 * 4 = 12

10 / 2 = 5

就算兩種解法。(加法,乘法交換律後算不同的方案)

你一共找到了多少種方案?

請填寫表示方案數目的整數。

注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。

計算次數13!,編碼複雜度低但時間複雜度高的演算法:(用時255秒)

#include #include 

#include

#include

#define ff(a,b) for(a=0;a#define f(a,b,c) for(a=b;a#define o printf

#define i scanf

#define max (1<<30)+1

#define len 1010

using

namespace

std;

int p[13]= ;

intans;

void

judge()

}int

main()

while(next_permutation(p,p+13

)); cout

return0;

}

剪枝優化後,執行時間為1.4秒:

#include #include 

#include

#include

#define ff(a,b) for(a=0;a#define f(a,b,c) for(a=b;a#define o printf

#define i scanf

#define max (1<<30)+1

#define len 20

using

namespace

std;

intnum[len];

intused[len];

int ans=0

;void dfs(int

step)

if(step==4

)

if(num[1]+num[2]!=num[3]) return

;

if(step==7

)

if(num[4]-num[5]!=num[6]) return

;

if(step==10

)

if(num[7]*num[8]!=num[9]) return

;

for(int i=1;i<=13;i++) if(!used[i])

}int

main()

2023年藍橋杯c c B組

能力有限,此處只有本人會的題目呀 煤球數目 有一堆煤球,堆成三角稜錐形。具體 第一層放1個,第二層3個 排列成三角形 第三層6個 排列成三角形 第四層10個 排列成三角形 如果一共有100層,共有多少個煤球?請填表示煤球總數目的數字。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。...

2023年藍橋杯

四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對4個數排序 0 a b c d 並對所有的可能表示法按 a,b,c,d 為聯合主鍵公升序排列,最後輸出第乙個表示...

2023年藍橋杯B組C C 決賽題目

從昏迷中醒來,小明發現自己被關在x星球的廢礦車裡。礦車停在平直的廢棄的軌道上。他的面前是兩個按鈕,分別寫著 f 和 b 小明突然記起來,這兩個按鈕可以控制礦車在軌道上前進和後退。按f,會前進97公尺。按b會後退127公尺。透過昏暗的燈光,小明看到自己前方1公尺遠正好有個監控探頭。他必須設法使得礦車正...