藍橋杯歷年國賽真題彙總:here哥德**猜想認為:不小於4的偶數都可以表示為兩個素數的和。
你不需要去證明這個定理,但可以通過計算機對有限數量的偶數進行分解,驗證是否可行。
實際上,一般乙個偶數會有多種不同的分解方案,我們關心包含較小素數的那個方案。
對於給定數值範圍,我們想知道這些包含較小素數方案中最大的素數是多少。
比如,100以內,這個數是19,它由98的分解貢獻。
你需要求的是10000以內,這個數是多少?
答案:173
const int n = 10000;
vectorprime;
bool vis[10010];
int ans;
void check(int n)
}}void solve()
w星球的長老交給小明乙個任務:
1,2,3...16 這16個數字分為兩組。
要求:這兩組數字的和相同,
並且,兩組數字的平方和也相同,
並且,兩組數字的立方和也相同。
請你利用計算機的強大搜尋能力解決這個問題。
並提交1所在的那個分組的所有數字。
這些數字要從小到大排列,兩個數字間用乙個空格分開。
即類似:1 4 5 8 ... 這樣的答案。
注意,只提交這一組數字,不要填寫任何多餘的內容。
笨笨有話說:
只要乙個組的成員確定了,另乙個組的成員也就確定了。列舉乙個組的成員就可以了。
憑直覺,兩個組的成員數目不會差太多吧。
歪歪有話說:
既然求 1 所在的那個組,那只要列舉剩餘的成員就可以了。
貌似都是8個成員的可能性很大啊。
答案:1 4 6 7 10 11 13 16爆搜
bool vis[17];
void dfs(int pos, int cnt)
if (sum1 == sum11 and sum2 == sum22)
return ;
}for (int i = pos + 1; i <= 16; ++i)
}
雖然我們學了許久的程式設計,但對於簡單的四則混合表示式,如果讓我們完全白手起家地程式設計來解析,還是有點棘手。
這裡,我們簡化一下問題,假設只有加法和乘法,並且沒有括號來改變優先順序。
再假設參加運算的都是正整數。
在這麼多的限制條件下,表示式的解析似乎簡單了許多。
下面的**解決了這個問題。請仔細閱讀原始碼,並填寫劃線部分缺少的**。
#include int f3(const char* s, int begin, int end)
return sum;
}int f2(const char* s, int begin, int end)
printf("f2: pro=%d\n", pro);
return pro;
}int f(const char* s)
return sum;
}int main()
注意:只填寫劃線處缺少的內容,不要填寫已有的**或符號,也不要填寫任何解釋說明文字等。
答案:f3(s, p0, p)
仔細閱讀**即可
我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。
如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。
本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。
輸入:一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0比如:
輸入:
1 8 1
程式應該輸出:
125
再比如:
輸入:
1 8 3
程式應該輸出:
500
再比如:
輸入:
282866 999000 6
程式應該輸出:
914
提交時,注意選擇所期望的編譯器型別。
笨笨有話說:
這個除法小學就會算啊,模擬手算除法的過程就可以了吧。
只是數有點大啊....
管它呢,能算多遠算多遠....
歪歪有話說:
如果我能確定迴圈節從**開始到**結束,再大的數不過就是與它取模的餘數等價啊
【思路】
模擬除法。
13 / 7 = 1.85714285...
這裡求小數部分,所有取模忽略掉整數部分
13 / 7 -> 6 / 7
第一位:(小數點後第幾位,以下同)6 * 10 / 7 = 8;
得到第一位後的餘數:6 * 10 % 7 = 4
那麼第二位:4 * 10 / 7 = 5
得到第二位後的餘數:4 * 10 % 7 = 5
第三位:5 * 10 / 7 = 7
依此類推
void solve()
for (int i = 0; i < n + 2; ++i)
}
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求最少需要分幾個考場才能滿足條件。
輸入格式:
第一行,乙個整數n(1輸出格式:
一行乙個整數,表示最少分幾個考場。
例如:輸入:
5
81 2
1 31 4
2 32 4
2 53 4
4 5
程式應該輸出:
4
再比如:
輸入:
5
101 2
1 31 4
1 52 3
2 42 5
3 43 5
4 5
則程式應該輸出:
5
資源約定:
峰值記憶體消耗 < 256m
cpu消耗 < 1000ms
【思路】
一開始以為是並查集之類的連通圖大小的問題,寫了一發結果只通過 30% 的資料,重新審題發現其實就是圖的著色問題:給定頂點數和邊,求至少需要多少種顏色對圖進行塗色能是相鄰頂點顏色不同。
const int n = 110, inf = 0x3f3f3f3f;
int e[n][n];
int vis[n][n]; // vis[i][j] = t表示第i個考場裡面第j個人是t
int cnt[n]; // 記錄每個考場種的學生數量(對應的vis)
int ans = inf, n, m;
void dfs(int id, int num)
for (int i = 1; i <= num; ++i)
} // 現有考場都不行,就要增加考場
vis[num + 1][++cnt[num + 1]] = id;
dfs(id + 1, num + 1);
--cnt[num + 1]; // 回溯
}void solve()
dfs(1, 0);
cout << ans << "\n";
}
w星球的乙個種植園,被分成 m * n 個小格仔(東西方向m行,南北方向n列)。每個格仔裡種了一株合根植物。
這種植物有個特點,它的根可能會沿著南北或東西方向伸展,從而與另乙個格仔的植物合成為一體。
如果我們告訴你哪些小格仔間出現了連根現象,你能說出這個園中一共有多少株合根植物嗎?
輸入格式:
第一行,兩個整數m,n,用空格分開,表示格仔的行數、列數(1格仔的編號一行一行,從上到下,從左到右編號。
比如:5 * 4 的小格仔,編號:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
樣例輸入:
5 4
162 3
1 55 9
4 87 8
9 10
10 11
11 12
10 14
12 16
14 18
17 18
15 19
19 20
9 13
13 17
樣例輸出:
5
其合根情況參考圖[p1.png]
資源約定:
峰值記憶體消耗 < 256m
cpu消耗 < 2000ms
待補
2023年第八屆藍橋杯C B組D題
6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖所示就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。哈嘍,我又來補題了,我發現真的 就2019特簡單吧 其餘的。300...
2023年第八屆藍橋杯C B組G題
小明正在整理一批歷史文獻。這些歷史文獻 現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在很多可能的日...
2023年第八屆藍橋杯C B組I題
兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同例如一塊6x5的巧克力可以...