2019第十届蓝桥杯省赛C/C++B组题解
作為很久很久沒(méi)有寫(xiě)過(guò)算法題的考研狗 OvO(是這樣的,卑微考研),我于今年再次參加了藍(lán)橋杯...
大家都說(shuō)這次藍(lán)橋杯簡(jiǎn)單,我也是這么覺(jué)得的(或者說(shuō)是我運(yùn)氣好),或者說(shuō)是考細(xì)節(jié)吧(雖然我也沒(méi)怎么考慮細(xì)節(jié)qwq),反正整個(gè)比賽的過(guò)程中心情感覺(jué)是放飛了自我(超級(jí)輕松)....
考完最開(kāi)始在知乎上對(duì)了一波答案感覺(jué)涼的透徹,想著這次省三能不能拿到qwq,結(jié)果當(dāng)成績(jī)出來(lái)的時(shí)候是省一...名次貌似也還不錯(cuò)...這次抽空,想著馬上就要國(guó)賽了,多多練習(xí)一下題目,也把這次的吃面包之旅好好總結(jié)一哈~~~~
愛(ài)心是卑微的博主的成績(jī)(羞澀)
、
?
好了廢話不多說(shuō),各位扁桃體同學(xué),下面看博主開(kāi)始發(fā)炎了(來(lái)看看題目有多水)~~~
一、組隊(duì)
作為籃球隊(duì)教練,你需要從以下名單中選出 1 號(hào)位至 5 號(hào)位各一名球員,組成球隊(duì)的首發(fā)陣容。
每位球員擔(dān)任 1 號(hào)位至 5 號(hào)位時(shí)的評(píng)分如下表所示。請(qǐng)你計(jì)算首發(fā)陣容 1 號(hào)位至 5 號(hào)位的評(píng)分之和最大可能是多少?
?
解答:最開(kāi)始看到這題沒(méi)看清楚題意差點(diǎn)坑了,直接把所有的最大值加起來(lái)了...還好感覺(jué)后來(lái)不對(duì)勁想了我去...這個(gè)只能出5名同學(xué),我一看,應(yīng)該是dfs,但是感覺(jué)第一題簡(jiǎn)單題啊我去,用啥dfs,直接目測(cè)一波。嗯,我就目測(cè)了一波。在紙上算了下,得出正確答案490。
答案: 490(注意不要算重復(fù)了)
?
二、年號(hào)字串
小明用字母A 對(duì)應(yīng)數(shù)字1,B 對(duì)應(yīng)2,以此類(lèi)推,用Z 對(duì)應(yīng)26。對(duì)于27以上的數(shù)字,小明用兩位或更長(zhǎng)位的字符串來(lái)對(duì)應(yīng),例如AA 對(duì)應(yīng)27,AB 對(duì)應(yīng)28,AZ 對(duì)應(yīng)52,LQ 對(duì)應(yīng)329。
請(qǐng)問(wèn)2019 對(duì)應(yīng)的字符串是什么?
解答:這題腦子都不想動(dòng)....最開(kāi)始我以為字符串要求是升序字符串才合法,但是從題意驗(yàn)證了一下發(fā)現(xiàn)BA這種也可以存在....然后瘋狂暴力,直接用筆算(不就是找個(gè)規(guī)律么,代碼都不想敲),10分鐘左右算出結(jié)果為BYQ。
但是為了大家方便看過(guò)程,附上代碼:
#include <bits/stdc++.h> using namespace std; //702 --> ZZ //703 --> AAA //18278 --> ZZZ //18279 --> AAAA void dfs(int N) {//并不是26進(jìn)制喲if (N > 26) dfs((N - 1) / 26);putchar('A' + (N - 1) % 26); } int main() {int N;while (cin >> N) {dfs(N); cout << endl;}return 0; }答案: BYQ(注意...沒(méi)啥注意的有問(wèn)題驗(yàn)證題意就完事兒了)
?
三、數(shù)列求值
給定數(shù)列1, 1, 1, 3, 5, 9, 17, …,從第4 項(xiàng)開(kāi)始,每項(xiàng)都是前3 項(xiàng)的和。求
第20190324 項(xiàng)的最后4 位數(shù)字。
解答:看到這個(gè),很明顯如果暴力直接加肯定會(huì)爆掉,注意是最后4位數(shù)字,也就是說(shuō)前面無(wú)論怎么騷,關(guān)最后4位數(shù)啥事兒呢?比如148665468797436465+4678646456465465465求最后4位數(shù),前面再怎么花里胡哨也沒(méi)用吧qwq,我們只要求最后最后4位數(shù)相加就可以了,注意時(shí)刻對(duì)10000取模就完事兒了吧。
方法:打表取模。
#include<iostream> #include<algorithm> using namespace std; int main() {int a=1,b=1,c=1;int ans;for(int i=4;i<=20190324;i++){ans=(a+b+c)%10000;a=b%10000;b=c%10000;c=ans%10000;}cout<<ans<<endl; }答案:4659(注意取模)
?
四、數(shù)的分解
把2019 分解成3 個(gè)各不相同的正整數(shù)之和,并且要求每個(gè)正整數(shù)都不包含數(shù)字 2 和 4,一共有多少種不同的分解方法?
注意交換3個(gè)整數(shù)的順序被視為同一種方法,例如1000+1001+18 和 1001+1000+18 被視為同一種。
解答:直接三重循環(huán)打表判斷。
#include <bits/stdc++.h> using namespace std; bool isOK(int x) {for (/* */; x > 0; x /= 10)if (x % 10 == 2 || x % 10 == 4) return false;return true; } int main() {int N = 2019;int cnt = 0;for (int i = 1; i < N / 3; ++i)if (isOK(i))//k = N - i - j > jfor (int j = i + 1; N - i - j > j; ++j)if (isOK(j) && isOK(N - i - j)) ++cnt;cout << cnt << endl;return 0; }答案: 40785
?
五、 迷宮
前面4題對(duì)了,第5題最后一點(diǎn)時(shí)間沒(méi)dfs出來(lái)....最短路徑長(zhǎng)度很熟練了,標(biāo)記我硬是不知道用dfs怎么去標(biāo)記(好了我太菜我已經(jīng)知道了)。
下圖給出了一個(gè)迷宮的平面圖,其中標(biāo)記為1 的為障礙,標(biāo)記為0 的為可以通行的地方。
010000 000100 001001 110000迷宮的入口為左上角,出口為右下角,在迷宮中,只能從一個(gè)位置走到這個(gè)它的上、下、左、右四個(gè)方向之一。
對(duì)于上面的迷宮,從入口開(kāi)始,可以按DRRURRDDDR 的順序通過(guò)迷宮,一共10 步。其中D、U、L、R 分別表示向下、向上、向左、向右走。對(duì)于下面這個(gè)更復(fù)雜的迷宮(30 行50 列),請(qǐng)找出一種通過(guò)迷宮的方式,其使用的步數(shù)最少,在步數(shù)最少的前提下,請(qǐng)找出字典序最小的一個(gè)作為答案。請(qǐng)注意在字典序中D<L<R<U。
等我抽空敲一下再上代碼。
?
六、特別數(shù)的和
小明對(duì)數(shù)位中含有 2、0、1、9 的數(shù)字很感興趣(不包括前導(dǎo)0),在1 到 40 中這樣的數(shù)包括1、2、9、10 至 32、39 和 40,共 28 個(gè),他們的和是 574。請(qǐng)問(wèn),在 1 到n 中,所有這樣的數(shù)的和是多少?
【輸入格式】
輸入一行包含兩個(gè)整數(shù)n。
【輸出格式】
輸出一行,包含一個(gè)整數(shù),表示滿(mǎn)足條件的數(shù)的和。
【樣例輸入】
40
【樣例輸出】
574
【評(píng)測(cè)用例規(guī)模與約定】
對(duì)于20% 的評(píng)測(cè)用例,1≤n≤10 1 \leq n \leq 101≤n≤10。
對(duì)于50% 的評(píng)測(cè)用例,1≤n≤100 1 \leq n \leq 1001≤n≤100。
對(duì)于80% 的評(píng)測(cè)用例,1≤n≤1000 1 \leq n \leq 10001≤n≤1000。
對(duì)于所有評(píng)測(cè)用例,1≤n≤10000 1 \leq n \leq 100001≤n≤10000。
解答:無(wú)腦暴力枚舉。
#include<iostream> #include<algorithm> using namespace std; bool judge(int n) {while(n!=0){int k=n%10;if(k==2||k==0||k==1||k==9)return true;n=n/10;}return false; } int main() {int n;cin>>n;int ans=0;for(int i=1;i<=n;i++){if(judge(i)){ans+=i;}}cout<<ans<<endl; }?
明天繼續(xù)更新
?
總結(jié)
以上是生活随笔為你收集整理的2019第十届蓝桥杯省赛C/C++B组题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓之设计模式七大原则
- 下一篇: c语言标准库 SOCKET,[转载] 基