2015年蓝桥杯省赛B组C/C++(试题+答案分析)

第一题 结果填空 (3分)

奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

正确答案:52488

思路解析:

方法 1:最高位0、4不能使用,剩余8个数字(1,2,3,5,6,7,8,9),剩下的四位(千位、百位、十位、个位),剩下位数可以使用0.

     可以使用除了4以外的所有数字,所以共有 8*9*9*9*9种解,计算得答案为:52488。

方法2:暴力搜索方法(c++)
代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int a, b, c, d, e;int count = 0;for(a = 1; a <= 9; a++){for(b = 0; b <= 9; b++){for(c = 0; c <= 9; c++){for(d = 0; d <= 9; d++){for(e = 0; e <= 9; e++){if(a != 4 && b != 4 && c != 4 && d != 4 && e !=4){count++;}}}}}}cout<<count<<endl;return 0;
}

总结:
蓝桥杯第一题一般只有三种方法:

  • 数学方法
  • excel表格
  • 暴力解决
    也就是间接说明不是很难,但一定要细心,如果你想得奖,这题必不可失分奥。

第二题 结果填空 (5分)

星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。

正确答案:2017-08-05

思路解析
方法1:从2014到2017年之间2016年是闰年,因此这一年就是365天,手动解决
方法2:excel
点击回车enter

方法3:暴力解决(c++)
代码:

#include<iostream>
using namespace std;
int main(){int sum=1000;int Mdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};int Y=2014;int M=11;int D=9;
//在此循环 1000 次for(int i=1;i<=sum;i++){ D++; //每循环一次则日数加 1 if(D>Mdays[M-1]){ //如果日数大于 11 月的日数, 则日数重置为 1, 月数加 1 D=1;M++;if(M>12){ //如果月数大于 12, 则月数重置为 1, 年数加 1. M=1;Y++;  //是否为闰年进行判断 if((Y%400==0)||(Y%4==0&&Y%100!=0)){Mdays[1]=29;}else{Mdays[1]=28;}}} } cout<<Y<<"-"<<M<<"-"<<D<<endl;return 0;
}

第三题 结果填空 (9分)

三羊献瑞

观察下面的加法算式:

   祥 瑞 生 辉
+  三 羊 献 瑞
---------------三 羊 生 瑞 气

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

正确答案:1085

思路解析:
方法1:暴力方法:

  a b c d
+ 1 e f b
···········
1 e c b g

代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int a, b, c, d, e, f, g;for(a = 1; a <= 9; a++){for(b = 0; b <= 9; b++){for(c = 0; c <= 9; c++){for(d = 0; d <= 9; d++){for(e = 0; e <= 9; e++){for(f = 0; f <= 9; f++){for(g = 0; g <= 9; g++){if((a * 1000 + b * 100 + c * 10 + d) + (1000 + e * 100 + f * 10 + b) == (10000 + e * 1000 + c * 100 + b * 10 + g)){if(a != 1 && b != 1 && c != 1 && d != 1 && e != 1 && f != 1){if(a != b && a != c && a != d && a !=e && a != f && a != g && b != c && b != d && b != e && b != f && b != g && c != d && c != e && c != f && c != g && d != e && d != f && d != g && e != f && e != g && f != g){cout<<1 * 1000 + e * 100 + f * 10 + b<<endl;}}}}}}}}}}return 0;}

方法2:数学分析
1+a>10,故 a = 8(后面进位1),9. e =0 ,故后面没法进位,a = 9 .则 b = c

  9 b c d
+ 1 0 f b
···········
1 0 c b g

因为 b != c ,
所以 c = b + 1;
因为 c = b + 1 ,c + f = 10 + c - 1,
则 f =8 ,9.

此时,( b+1 ) * 10 + d + b + f * 10 = 100 + b * 10 + g;

整理得:
d + b + f * 10 = 90 + g

f = 8, b + d = 10 + g;
因为1 < b , g , d < 8,(已经排除了1 , 0 , 8, 9 )
因为 b + d > 10 ,
所以 g >= 2,b , d> 2
3+7, 4+7 排除, 只剩下 5+7= 12 ,
因为 b + 1 = c ! = 8, so b =5;

第四题 代码填空 (11 分)

格子中输出

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
要求字符串在水平、垂直两个方向上都居中。
如果字符串太长,就截断。
如果不能恰好居中,可以稍稍偏左或者偏上一点。

下面的程序实现这个逻辑,请填写划线部分缺少的代码。

#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", _____________________________________________); //填空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;
}

正确答案:(width-strlen(s)-2)/2,"",s,(width-strlen(s)-1)/2,""

思路分析:
方法:先将要补充的部分注释掉,然后运行和题目大意比较,运行如下:

知识补充:
scanf里用*修饰符,是起到过滤读入的作用。
比如一个有三列数值的数据,要得到第2列数值,可以在循环里用scanf(“%*d%d%d”, a[i])来读入第i行的第2个数值到a[i]。
就像printf(“%6d”, 123),,是设置域宽的作用。
 同理,%6s也是域宽。
修饰符正是用来更灵活的控制域宽,如printf(“%*s”, 6, “abc”)就是把”abc”放到在域宽为6的空间中右对齐。
   * 是用变量来控制域宽,那么这题就简单了,这里应该填写5个实参。然后字符长度的计算应该用buf而不是s,因为buf才是截断后的长度,用s的话,如果s长度超过了width-2,效果就不对了。

使用说明的代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main() {char s[100] = "abcd1234";char buf[1000];int width = 20;strcpy(buf, s);buf[width-2] = 0;printf("|%*s%s%*s|\n", (width-strlen(buf)-2)/2, "", buf, (width-strlen(buf)-2)/2, "");return 0;
}


第五题 代码填空 (13分)

九数组分数

1,2,3…9 这九个数字组成一个分数,其值恰好为1/3,如何组法?

下面的程序实现了该功能,请填写划线部分缺失的代码。

#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;
}

正确答案:{t=x[k]; x[k]=x[i]; x[i]=t;}

思路分析:

方法:
观察题目,感觉很完整,for也有出口,却什么都没有打印,
英语老师告诉我,要联系上下文,上面说明是一个递归,而且有交换for 将所有的都与k交换了一次,然再递归。但考虑,交换做什么?
所以,联系回溯的思想,即可联想到再交换回来。

知识补充:
https://www.zhihu.com/people/1111111-51-87-91

ok,今天就先到这里,安!

2015年蓝桥杯省赛B组C/C++(试题+答案分析)相关推荐

  1. 2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径

    2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径 代码 试题 E: 路径 Ans=10266837 我哭了 最短路径的题考前刷了多少道,最后还是在考场翻车 还是太菜啊啊.. 首先是边权图的初 ...

  2. 2015年蓝桥杯省赛A组c++第4题

    /* StringInGrid函数会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左或者偏上一点. 下面的程 ...

  3. 2015年蓝桥杯---省赛B组C题---三羊献瑞

    三羊献瑞 题目描述: 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞 ---------------三 羊 生 瑞 气 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写& ...

  4. 第六届蓝桥杯省赛javaB组真题及答案

    第一题:三角形面积如图1所示.图中的所有小方格面积都是1.那么,图中的三角形面积应该是多少呢? 答案:88-84/2-64/2-82/2=28: 第二题:立方变自身观察下面的现象,某个数字的立方,按位 ...

  5. 第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)

    目录 A.外星日历 B.兴趣小组 C.纸牌三角形 D.承压计算 E.杨辉三角(填空) F.最大公共子串 G.Excle地址 H.拉马车 I.青蛙跳杯子 J.图形排版 A.外星日历 某星系深处发现了文明 ...

  6. 第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)

    目录 A.求和 B.矩形切割 C.不同子串 D.质数 E.最大降雨量 F.旋转 G.外卖店优先级 H.人物相关性分析 I.等差数列 J.打扫机器人 A.求和 试题 A: 求和 本题总分:5 分 [问题 ...

  7. 第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)

    目录 A.有奖猜谜 B.煤球数目 C.平方怪圈 D.骰子游戏 E.分小组 F.凑算式 G.搭积木 H.冰雹数 I.四平方和 J.密码脱落 A.有奖猜谜 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的 ...

  8. 第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版·冰雹数递归解法·超简易)

    目录 A.有奖猜谜 B.煤球数目 C.平方怪圈 D.骰子游戏 E.分小组 F.凑算式 G.搭积木 H.冰雹数 题解1: 题解2: [2022级王组顼]先生提供的简易写法,需要思考规律. 题解3: [2 ...

  9. 第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)

    前言 本次题目我认为还是比较难的,有人做了一个分析,我们来看看啊. 话说真的对于大专生来说已经是非常难的了呢,能拿到省一的基本上都是万里挑一的孩子呢. 目录 前言 试题 A: 排列字母 试题 B: 特 ...

最新文章

  1. 上当记,收国外快递时,注意相关责任定义
  2. 始终在新标签页中打开文件
  3. UDP如何实现可靠传输
  4. 蒋涛,CSDN创始人,俺村的骄傲
  5. 仓储模式到底是不是反模式?
  6. Microsoft规划了.NET的未来发展
  7. 欢乐纪中某B组赛【2019.1.21】
  8. 窗口函数和hive优化简记
  9. 085:QuerySet API详解-defer和only
  10. anaconda安装keras_一定要看的Tensorflow-GPU+Keras安装教程
  11. Matlab 小波变换dwt和wavedec
  12. 竞价推广账户日常优化需要注意十大要点
  13. ApiDoc 一键生成注释
  14. 目录 1. 管理的门槛 1 1.1. 资历作为一个年龄效应 1 1.2. 高层次知识结构的构建与提升 系统层面及战略层面的问题时 1 2. ,一类是绝对年龄效应,另一类是相对年龄效应。 1 2.1.
  15. 飞机大战java实训报告_java飞机大战实训报告.docx
  16. 微信小程序实现上传图片的功能
  17. 爬虫技术(01)神箭手爬虫初学案例解读
  18. 回头再说 008 瞬
  19. 如何打造个人品牌(IP)?
  20. Kubernetes Pod 冗余策略

热门文章

  1. 【冷推荐】各领域最值得推荐的入门书籍,值得收藏!!
  2. matlab只能运行两次,[求助]先后两次运行,一次报错一次不报错是为何?
  3. Java 连接华为云
  4. cisco 2960 VLAN MAC_mac如何隐藏文件,mac隐藏文件工具推荐~
  5. 一款免费无广、简单易用的安全软件:火绒安全软件
  6. adblock屏蔽带空格的class
  7. android 布局分析,关于Android应用程序界面五大布局的图文分析教程
  8. 拉格朗日对偶性Duality and the Lagrangian
  9. 基于ROS搭建简易软件框架实现ROV水下目标跟踪(补2)--水下slam仿真构想
  10. 今天2.4寸tft触摸屏到手--刷屏驱动小结