日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

保证全对——2015年第六届蓝桥杯C/C++ B组部分解题报告

發(fā)布時(shí)間:2024/2/28 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 保证全对——2015年第六届蓝桥杯C/C++ B组部分解题报告 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在備考藍(lán)橋杯,但網(wǎng)上的答案五花八門,甚至有很多題結(jié)果不正確就貼上去了,于是我整理了一份保對(duì)的答案和解析,分享給大家。 后續(xù)會(huì)填坑+更新,請(qǐng)持續(xù)關(guān)注


1.結(jié)果填空 (滿分3分)

獎(jiǎng)券數(shù)目
有些人很迷信數(shù)字,比如帶“4”的數(shù)字,認(rèn)為和“死”諧音,就覺(jué)得不吉利。
雖然這些說(shuō)法純屬無(wú)稽之談,但有時(shí)還要迎合大眾的需求。某抽獎(jiǎng)活動(dòng)的獎(jiǎng)券號(hào)碼是5位數(shù)(10000-99999),要求其中不要出現(xiàn)帶“4”的號(hào)碼,主辦單位請(qǐng)你計(jì)算一下,如果任何兩張獎(jiǎng)券不重號(hào),最多可發(fā)出獎(jiǎng)券多少?gòu)垺?/p>

請(qǐng)?zhí)峤辉摂?shù)字(一個(gè)整數(shù)),不要寫任何多余的內(nèi)容或說(shuō)明性文字。

解題思路:

直接五重循環(huán)爆破即可。

#include<bits/stdc++.h> using namespace std; int main() {int q,w,e,r,t, sum=0;for(q=1; q<=9; q++) for(w=0; w<=9; w++) for(e=0; e<=9; e++) for(r=0; r<=9; r++) for(t=0; t<=9; t++) if(q!=4 && w!=4 && e!=4 && r!=4 && t!=4) sum++;cout << sum;return 0; }

2.結(jié)果填空 (滿分5分)

星系炸彈
在X星系的廣袤空間中漂浮著許多X星人造“炸彈”,用來(lái)作為宇宙中的路標(biāo)。
每個(gè)炸彈都可以設(shè)定多少天之后爆炸。
比如:阿爾法炸彈2015年1月1日放置,定時(shí)為15天,則它在2015年1月16日爆炸。
有一個(gè)貝塔炸彈,2014年11月9日放置,定時(shí)為1000天,請(qǐng)你計(jì)算它爆炸的準(zhǔn)確日期。

請(qǐng)?zhí)顚懺撊掌?#xff0c;格式為 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
請(qǐng)嚴(yán)格按照格式書(shū)寫。不能出現(xiàn)其它文字或符號(hào)。


解題思路:

解法一:采用程序做計(jì)算器+手算
解法二:使用Excel工具



3.結(jié)果填空 (滿分9分)

三羊獻(xiàn)瑞
觀察下面的加法算式:

祥 瑞 生 輝+ 三 羊 獻(xiàn) 瑞 -------------------三 羊 生 瑞 氣

(如果有對(duì)齊問(wèn)題,可以參看【圖1.jpg】)

其中,相同的漢字代表相同的數(shù)字,不同的漢字代表不同的數(shù)字。

請(qǐng)你填寫“三羊獻(xiàn)瑞”所代表的4位數(shù)字(答案唯一),不要填寫任何多余內(nèi)容。


解題思路:

已知不同的字代表不同的數(shù)組,則可確定共有8個(gè)未知數(shù)

解法一:暴力法:八重循環(huán),同時(shí)if判斷互不相等,無(wú)腦就完事了,快還方便。

#include<stdio.h> using namespace std; int main() {int q,w,e,r,t,y,u,i;for(q = 0; q <= 9; q++) {for(w = 0; w <= 9; w++) {for(e = 0; e <= 9; e++) {for(r = 0; r <= 9; r++) {for(t = 0; t <= 9; t++) {for(y = 0; y <= 9; y++) {for(u = 0; u <= 9; u++) {for(i = 0; i <= 9; i++) {if(q!=w && q!=e && q!=r && q!=t && q!=y && q!=u && q!=i && w!=e && w!=r && w!=t && w!=y && w!=u && w!=i && e!=r && e!=t && e!=y && e!=u && e!=i && r!=t && r!=y && r!=u && r!=i && t!=y && t!=u && t!=i && y!=u && y!=i && u!=i ) {if(q*1000 + w*100+e*10+r+t*1000+y*100+u*10+w==t*10000+y*1000+e*100+w*10+i) {printf("%d+%d=%d\n",q*1000+w*100+e*10+r, t*1000+y*100+u*10+w, t*10000+y*1000+e*100+w*10+i) ;}}}}}}}}}}return 0; }

解法二:稍微推一推。 設(shè)出未知數(shù),即:

首先可得e=1,因?yàn)閮蓚€(gè)四位數(shù)相加得到的五位數(shù),其萬(wàn)位一定是1。
由于e等于1,則a必定=9。 理由同上。
由于a等于9,f必定等于0。 因?yàn)?+9=10,進(jìn)位。
由于f等于0,而b+f還等于c,所以b+f一定接受了c+g的進(jìn)位。 也就是說(shuō):b+1=c
知道以上條件,則只需遍歷b, g, d, i即可。

PS:太磨嘰了 沒(méi)有直接暴力來(lái)得快。



4.代碼填空 (滿分11分)

格子中輸出
StringInGrid函數(shù)會(huì)在一個(gè)指定大小的格子中打印指定的字符串。
要求字符串在水平、垂直兩個(gè)方向上都居中。
如果字符串太長(zhǎng),就截?cái)唷?br /> 如果不能恰好居中,可以稍稍偏左或者偏上一點(diǎn)。
下面的程序?qū)崿F(xiàn)這個(gè)邏輯,請(qǐng)?zhí)顚憚澗€部分缺少的代碼。

#include <stdio.h> #include <string.h>void StringInGrid(int width, int height, const char* s) {int i,k;char buf[1000];strcpy(buf, s);if(strlen(s)>width-2) buf[width-2]=0;printf("+");for(i=0;i<width-2;i++) printf("-");printf("+\n");for(k=1; k<(height-1)/2;k++){printf("|");for(i=0;i<width-2;i++) printf(" ");printf("|\n");}printf("|");// printf("%*s%s%*s",(width-strlen(buf))/2-1,"",s,(width-strlen(buf))/2-1,""); //填空printf("|\n");for(k=(height-1)/2+1; k<height-1; k++){printf("|");for(i=0;i<width-2;i++) printf(" ");printf("|\n");} printf("+");for(i=0;i<width-2;i++) printf("-");printf("+\n"); }int main() {StringInGrid(20,6,"abcd1234");return 0; }
解題思路:

首先,我們注釋掉橫線處運(yùn)行,得到:

說(shuō)明該行填寫空格和字符串,

再看%*s,*代表數(shù)字,如:printf("%*s",3,buf); 代表輸出buf的前三位。

理解了這點(diǎn)后,做出這道題就很容易了,只需求出空格的長(zhǎng)度即可, 結(jié)合題給中“偏左偏上”可得結(jié)果:printf("%*s%s%*s",(width-strlen(buf))/2-1,"",s,(width-strlen(buf))/2-1,"");

切記,一定要化簡(jiǎn)。因?yàn)樘羁疹}答案是唯一的



5.代碼填空 (滿分13分)

九數(shù)組分?jǐn)?shù)
1,2,3…9 這九個(gè)數(shù)字組成一個(gè)分?jǐn)?shù),其值恰好為1/3,如何組法?
下面的程序?qū)崿F(xiàn)了該功能,請(qǐng)?zhí)顚憚澗€部分缺失的代碼。

#include <stdio.h>void test(int x[]) {int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];if(a*3==b) printf("%d / %d\n", a, b); }void f(int x[], int k) {int i,t;if(k>=9){test(x);return;}for(i=k; i<9; i++){{t=x[k]; x[k]=x[i]; x[i]=t;}f(x,k+1);_____________________________________________ // 填空處} }int main() {int x[] = {1,2,3,4,5,6,7,8,9};f(x,0); return 0; }
解題思路:

要求我們補(bǔ)全回溯的代碼。也就是說(shuō):修改了哪個(gè)地方,回溯結(jié)束后,就要改回來(lái)
即:{t=x[k]; x[k]=x[i]; x[i]=t;}



6.結(jié)果填空 (滿分17分)(高分啊!)

加法變乘法

我們都知道:1+2+3+ … + 49 = 1225
現(xiàn)在要求你把其中兩個(gè)不相鄰的加號(hào)變成乘號(hào),使得結(jié)果為2015

比如:

1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015

就是符合要求的答案。

請(qǐng)你尋找另外一個(gè)可能的答案,并把位置靠前的那個(gè)乘號(hào)左邊的數(shù)字提交(對(duì)于示例,就是提交10)。

注意:需要你提交的是一個(gè)整數(shù),不要填寫任何多余的內(nèi)容。

解題思路:

題給中每個(gè)信息都要有效利用,那么1+2+…+49=1225有什么用呢, 可以定義num=1225。
接下來(lái)定義二重循環(huán)(像求最大子序列和一樣),i*(i+1)代表第一個(gè)乘數(shù),j*(j+1)代表第二個(gè)乘數(shù), 用1225加上他們,同時(shí)減去i,i+1,j,j+1這四個(gè)數(shù)。判斷是否等于2015即可。

#include<bits/stdc++.h> using namespace std; int main() {for(int i = 1; i <= 48; i++) {for(int j = i+2; j <= 48; j++) {int num = 1225;num-=i; num-=i+1;num-=j; num-=j+1;num+=i*(i+1);num+=j*(j+1);if(num==2015) cout << i << endl; }} return 0;}

7.結(jié)果填空 (滿分21分)(同高分!)

牌型種數(shù)

小明被劫持到X賭城,被迫與其他3人玩牌。
一副撲克牌(去掉大小王牌,共52張),均勻發(fā)給4個(gè)人,每個(gè)人13張。
這時(shí),小明腦子里突然冒出一個(gè)問(wèn)題:
如果不考慮花色,只考慮點(diǎn)數(shù),也不考慮自己得到的牌的先后順序,自己手里能拿到的初始牌型組合一共有多少種呢?

請(qǐng)?zhí)顚懺撜麛?shù),不要填寫任何多余的內(nèi)容或說(shuō)明文字。

解題思路:

直接暴力13重循環(huán),判斷點(diǎn)數(shù)相加是否等于13即可。

#include<bits/stdc++.h> using namespace std; int main() {int q,w,e,r,t,y,u,i,o,p,a,s,d;int sum=0;for(q = 0; q <= 4; q++)for(w = 0; w <= 4; w++)for(e = 0; e <= 4; e++)for(r = 0; r <= 4; r++)for(t = 0; t <= 4; t++)for(y = 0; y <= 4; y++)for(u = 0; u <= 4; u++)for(i = 0; i <= 4; i++)for(o = 0; o <= 4; o++)for(p = 0; p <= 4; p++)for(a = 0; a <= 4; a++)for(s = 0; s <= 4; s++)for(d = 0; d <= 4; d++) if(q+w+e+r+t+y+u+i+o+p+a+s+d==13) sum++;cout << sum; return 0; }

8.程序設(shè)計(jì)(滿分15分)

移動(dòng)距離

X星球居民小區(qū)的樓房全是一樣的,并且按矩陣樣式排列。其樓房的編號(hào)為1,2,3…
當(dāng)排滿一行時(shí),從下一行相鄰的樓往反方向排號(hào)。
比如:當(dāng)小區(qū)排號(hào)寬度為6時(shí),開(kāi)始情形如下:

1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 …

我們的問(wèn)題是:已知了兩個(gè)樓號(hào)m和n,需要求出它們之間的最短移動(dòng)距離(不能斜線方向移動(dòng))

輸入為3個(gè)整數(shù)w m n,空格分開(kāi),都在1到10000范圍內(nèi)
w為排號(hào)寬度,m,n為待計(jì)算的樓號(hào)。
要求輸出一個(gè)整數(shù),表示m n 兩樓間最短移動(dòng)距離。

例如:
用戶輸入:
6 8 2
則,程序應(yīng)該輸出:
4

再例如:
用戶輸入:
4 7 20
則,程序應(yīng)該輸出:
5

資源約定:
峰值內(nèi)存消耗 < 256M
CPU消耗 < 1000ms


解題思路:

首先提取題意,即讓我們求S型數(shù)組中,兩點(diǎn)坐標(biāo)的x軸相對(duì)距離+y軸相對(duì)距離。

接下來(lái)考慮s型數(shù)組的規(guī)律,由于蛇形排列,但不影響y軸相對(duì)距離,于是先求y,也就是row(相隔行數(shù))

很容易推出行數(shù)公式:w%m==0?row=w/m:row=w/m+1。

然后考慮列數(shù)col:我們發(fā)現(xiàn):在奇數(shù)行中,數(shù)字從左至右為從小到大。偶數(shù)行相反。

因此分為兩種情況考慮:若為奇數(shù)行,其列數(shù)為:col=w-(w*row-m);

同理,若為偶數(shù)行,其列數(shù)為:col=(w*row-m)+1。 為什么加1呢,因?yàn)槊啃忻苛卸际菑?開(kāi)始計(jì)數(shù)。

接下來(lái)展示代碼:

#include<cstdio> #include<iostream> #include<cmath> using namespace std; int main() {ios::sync_with_stdio(false);int w, m, n; while(cin >> w >> m >> n) {int rm = m%w==0? m/w : m/w+1; //行數(shù) int rn = n%w==0? n/w : n/w+1;int cm, cn; //列數(shù)if(rm % 2 == 0) cm = rm*w-m + 1; //從1開(kāi)始,所以+1else cm = w - (rm*w-m);if(rn % 2 == 0) cn = rn*w-n + 1; //從1開(kāi)始,所以+1else cn = w - (rn*w-n);cout << abs(rm-rn)+abs(cm-cn) << endl; } return 0; }

以上題全部A掉,理論上絕大多數(shù)省份都可以拿到省一了。

九題:待填坑

十題:待填坑

總結(jié)

以上是生活随笔為你收集整理的保证全对——2015年第六届蓝桥杯C/C++ B组部分解题报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。