蓝桥杯C语言本科B组预赛试题

合集下载

2013年蓝桥杯软件大赛预赛C本科B组试题

2013年蓝桥杯软件大赛预赛C本科B组试题

第四届“蓝桥杯”全国软件专业人才设计与创业大赛选拔赛C/C++本科B组考生须知:●考试开始后,选手首先下载题目到本机不被还原的盘符,并使用考场现场公布的解压密码解压试题。

●考试时间为9:00-13:00,共4个小时。

13点整时间截止时,将无法提交答案。

选手因考试结束不能提交答案的,责任由选手自负。

●在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。

●选手可浏览自己已经提交的答案。

●对同一题目,选手可多次提交答案,以最后一次提交的答案为准。

●选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。

●选手必须通过浏览器方式提交自己的答案。

选手在其它位置的作答或其它方式提交的答案无效。

●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。

结果填空题:要求选手根据题目描述直接填写结果。

求解方式不限。

不要求源代码。

把结果填空的答案直接通过网页提交即可,不要书写多余的内容。

代码填空题:要求选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。

所填写的代码不超过一条语句(即中间不能出现分号)。

把代码填空的答案(仅填空处的答案,不包括题面已存在的代码或符号)直接通过网页提交即可,不要书写多余的内容。

注意选择自己使用的编译环境。

使用ANSI C/ANSI C++ 标准,不要依赖操作系统或编译器提供的特殊函数。

程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果才有机会得分。

注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。

选手的程序必须是通用的,不能只对试卷中给定的数据有效。

对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库,但不能使用MFC或ATL等非ANSI C++标准的类库。

蓝桥杯b组c语言决赛试题及答案

蓝桥杯b组c语言决赛试题及答案

蓝桥杯b组c语言决赛试题及答案蓝桥杯B组C语言决赛试题及答案一、选择题1. 下列哪个选项是C语言中的关键字?A. intB. StringC. varD. float答案:A2. 在C语言中,哪个函数用于计算并返回字符串的长度?A. strlenB. lengthC. sizeD. count答案:A3. 下列哪个选项不是C语言中的基本数据类型?A. intB. floatC. charD. string答案:D二、填空题1. 在C语言中,表示逻辑“与”的运算符是______。

答案:&&2. 若有定义 `int a = 5;`,则表达式 `a++` 的值是______。

答案:53. 函数 `printf` 的返回值类型是______。

答案:int三、编程题1. 编写一个C语言程序,计算并输出100以内所有偶数的和。

```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("Sum of even numbers from 1 to 100 is: %d\n", sum); return 0;}```答案:程序正确计算了100以内所有偶数的和,并输出结果。

2. 编写一个C语言函数,实现字符串的反转。

```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int length = strlen(str);for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```答案:函数 `reverseString` 正确地反转了输入的字符串,并在 `main` 函数中进行了测试。

蓝桥杯历年c语言试题及答案

蓝桥杯历年c语言试题及答案

蓝桥杯历年c语言试题及答案蓝桥杯历年C语言试题及答案1. 题目一:数组反转要求:编写一个函数,实现对整数数组的反转。

输入:一个整数数组及其长度。

输出:反转后的数组。

答案:```cvoid reverseArray(int arr[], int n) {int temp;for (int i = 0; i < n / 2; i++) {temp = arr[i];arr[i] = arr[n - i - 1];arr[n - i - 1] = temp;}}```2. 题目二:寻找最大数要求:给定一个整数数组,找出其中的最大数。

输入:一个整数数组及其长度。

输出:数组中的最大数。

答案:```cint findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```3. 题目三:计算阶乘要求:编写一个函数,计算给定非负整数的阶乘。

输入:一个非负整数。

输出:该整数的阶乘。

答案:```clong long factorial(int n) {if (n == 0) return 1;long long fact = 1;for (int i = 1; i <= n; i++) {fact *= i;}return fact;}```4. 题目四:字符串反转要求:编写一个函数,实现对字符串的反转。

输入:一个字符串。

输出:反转后的字符串。

答案:```cvoid reverseString(char str[]) {int length = strlen(str);char temp;for (int i = 0; i < length / 2; i++) {temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}```5. 题目五:判断素数要求:编写一个函数,判断给定的整数是否为素数。

历年蓝桥杯省赛B组真题试题

历年蓝桥杯省赛B组真题试题
int i,j; for(i = 0 ; i < 3 ; i ++)
for(j = 0 ; j < 4 ; j ++) flag[i][j] = 1;
flag[0][0] = 0; flag[2][3] = 0; }
void Solve() {
int dir[8][2] = { 0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1}; int book = true; for(int i = 0 ; i < 3 ; i ++) {
int main() {
int i; int a[] = {5,13,6,24,2,8,19,27,6,12,1,17}; int N = 12;
quicksort(a, 0, N -1);
for(i=0; i<N; i++) printf("%d ", a[i]); printf("\n");
return 0; }
num[n]=0;
}
}
}
int main() {
memset(num,0,sizeof(num)); memset(visit,0,sizeof(visit)); dfs(1); cout<<sum; return 0; }
4 / 19
(4) 快速排序
历年蓝桥杯省赛 B 组真题试题
排序在各种场合经常被用到。 快速排序是十分常用的高效率的算法。
if(!visit[i]) {
visit[i] = true; mpt[x][y] = i; dfs(index+1); visit[i] = false; } } } else { dfs(index+1); } } int main() { init(); dfs(0); printf("%d\n",ans); return 0; }

蓝桥杯C语言本科B组预赛试题审批稿

蓝桥杯C语言本科B组预赛试题审批稿

蓝桥杯C语言本科B组预赛试题YKK standardization office【 YKK5AB- YKK08- YKK2C- YKK18】2014蓝桥杯C/C++语言本科B组预赛试题(完整)1.啤酒和饮料啤酒每罐元,饮料每罐元。

小明买了若干啤酒和饮料,一共花了元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

2.切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

3.李白打酒话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。

他边走边唱:无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。

则:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。

答案是个整数。

不要书写任何多余的内容。

4.史丰收速算史丰收速算法的革命性贡献是:从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!速算的核心基础是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:...,如果多位数超过 142857...,就要进1同理,2/7,3/7, ... 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

蓝桥杯第十一届CC++B组省赛真题整理

蓝桥杯第十一届CC++B组省赛真题整理

蓝桥杯第⼗⼀届CC++B组省赛真题整理蓝桥杯第⼗⼀届C/C++ B组省赛真题整理试题A: 门牌制作解法:模拟【问题描述】⼩蓝要为⼀条街的住户制作门牌号。

这条街⼀共有2020位住户,门牌号从1到2020编号。

⼩蓝制作门牌的⽅法是先制作О到9这⼏个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。

请问要制作所有的1到2020号门牌,总共需要多少个字符2?【答案提交】这是⼀道结果填空的题,你只需要算出结果后提交即可。

本题的结果为⼀个整数,在提交答案时只填写这个整数,填写多余的内容将⽆法得分。

#include<iostream>using namespace std;int ans;void count(int x){while(x){if(x%10==2) ans++;x/=10;}}int main(){for(int i=1;i<=2020;i++) count(i);cout<<ans<<endl;return 0;}答案:624试题B: 既约分数解法:枚举+gcd【问题描述】如果⼀个分数的分⼦和分母的最⼤公约数是1,这个分数称为既约分数。

例如,3/4,5/2,1/8,7/1都是既约分数。

请问,有多少个既约分数,分⼦和分母都是1到2020之间的整数(包括1和2020)?【答案提交】这是⼀道结果填空题,你只需要算出结果后提交即可。

本题的结果为⼀个整数,在提交答案时只填写这个整数,填写多余的内容将⽆法得分。

#include<iostream>using namespace std;int ans;int gcd(int a,int b){return b==0?a:gcd(b,a%b);}int main(){for(int i=1;i<=2020;i++)for(int j=1;j<=2020;j++)if(gcd(i,j)==1) ans++;cout<<ans<<endl;return 0;}答案:2481215试题C: 蛇形填数解法:模拟【问题描述】如下图所⽰,⼩明⽤从1开始的正整数“蛇形”填充⽆限⼤的矩阵。

蓝桥杯b组c语言历年题目

蓝桥杯b组c语言历年题目

蓝桥杯b组c语言历年题目全文共四篇示例,供读者参考第一篇示例:蓝桥杯是中国面向大学生的计算机科学与编程竞赛,设立了不同级别的组别和不同的题目形式,其中B组是C语言编程的比赛,考察参赛选手对于C语言编程的理解和应用能力。

参加B组比赛需要具备一定的编程基础和C语言知识,适合有一定编程经验的大学生参与。

历年来,蓝桥杯B组的C语言题目围绕着各种不同的主题展开,涵盖了计算机科学与编程的各个方面,从基础的数据结构和算法到高级的计算机网络和操作系统等内容,题目设计丰富多样,旨在考察参赛选手的编程能力和创新思维。

以下是部分历年蓝桥杯B组的C语言题目:1. 编写一个程序,实现一个简单的计算器功能,支持加减乘除运算,并能够处理输入错误的情况。

2. 设计一个程序,实现一个简单的俄罗斯方块游戏,要求具备显示界面和键盘控制功能。

3. 编程实现一个简单的网络聊天程序,要求实现客户端和服务器端的通信功能,支持实时消息传输。

4. 设计一个程序,模拟实现一个简单的操作系统,包括进程管理、文件系统和内存管理等功能。

5. 编写一个程序,实现一个简单的图形界面,包括按钮、文本框和标签等控件,能够响应用户的操作。

这些题目涵盖了C语言编程中的各个方面,要求选手具备良好的编程基础和解决问题的能力,能够独立完成编程任务并提供有效的解决方案。

蓝桥杯B组的C语言题目旨在培养参赛选手的编程能力和创新思维,帮助他们提升对计算机科学和编程的理解和实践能力。

参加蓝桥杯B组比赛不仅可以锻炼参赛选手的编程技能,还可以拓宽他们的视野,了解计算机科学与技术领域的最新动态和发展趋势。

通过参加蓝桥杯的比赛,参赛选手可以结识志同道合的朋友,与他们共同探讨问题,交流经验,共同进步。

第二篇示例:蓝桥杯是中国首个面向大学生的计算机程序设计和算法竞赛,有A、B、C、D四个组别,其中B组使用C语言进行比赛。

蓝桥杯B组的比赛题目涵盖了C语言的基础知识、算法和数据结构等方面,旨在考察参赛选手的编程能力和解决问题的能力。

蓝桥杯C语言本科B组预赛试题

蓝桥杯C语言本科B组预赛试题

2021蓝桥杯C/C++语言本科B组预赛试题〔完整〕1.啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了假设干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容〔例如:写了饮料的数量,添加说明文字等〕。

2.切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

3.李白打酒话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。

他边走边唱:无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。

那么:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数〔包含题目给出的〕。

注意:通过浏览器提交答案。

答案是个整数。

不要书写任何多余的内容。

4.史丰收速算史丰收速算法的革命性奉献是:从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!速算的核心根底是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:0.142857...,如果多位数超过142857...,就要进1同理,2/7,3/7, ... 6/7 也都是类似的循环小数,多位数超过n/7,就要进n下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

乘以7 的进位规律是:满142857 (1)满285714 (2)满428571 (3)满571428 (4)满714285 (5)满857142... 进6请分析程序流程,填写划线局部缺少的代码。

第七届蓝桥杯个人赛省赛--C语言B组

第七届蓝桥杯个人赛省赛--C语言B组

第七届蓝桥杯个⼈赛省赛--C语⾔B组题⽬⼀煤球数⽬有⼀堆煤球,堆成三⾓棱锥形。

具体:第⼀层放1个,第⼆层3个(排列成三⾓形),第三层6个(排列成三⾓形),第四层10个(排列成三⾓形),....如果⼀共有100层,共有多少个煤球?请填表⽰煤球总数⽬的数字。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

答案:171700解析:⽅法⼀:数学⽅法⽅法⼆:暴⼒循环易知每⼀层的数⽬都是上⼀层煤球数加上这⼀层的层数,代码如下:1 #include<cstdio>2 #include<iostream>3using namespace std;45int main()6 {7int i=0,sum=0,num=0;8//sum是煤球总数,num是当前层煤球数9for(i=1;i<=100;i++)10 {11 num+=i;12 sum+=num;13 }14 printf("%d\n",sum);15return0;16 }题⽬⼆⽣⽇蜡烛某君从某年开始每年都举办⼀次⽣⽇party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他⼀共吹熄了236根蜡烛。

请问,他从多少岁开始过⽣⽇party的?请填写他开始过⽣⽇party的年龄数。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

答案:26解析:暴⼒枚举,代码如下:1 #include<cstdio>2 #include<iostream>3using namespace std;45int main()6 {7int i,j,num;8//设某君从i岁开始过⽣⽇,现在j岁9//num是吹灭掉蜡烛数10for(i=0;i<200;i++)11 {12for(j=0;j<200;j++)13 {14 num=(i+j)*(j-i+1)/2;15if(num==236)16 {17 printf("%d\n",i);18break;19 }20 }21 }22return0;23 }题⽬三凑算式这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

2014蓝桥杯C语言本科B组预赛 试题

2014蓝桥杯C语言本科B组预赛 试题

2014蓝桥杯C/C++语言本科B组预赛试题(完整)1.啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

2.切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

3.李白打酒话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。

他边走边唱:无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。

则:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。

答案是个整数。

不要书写任何多余的内容。

4.史丰收速算史丰收速算法的革命性贡献是:从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!速算的核心基础是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:0.142857...,如果多位数超过142857...,就要进1同理,2/7,3/7, ... 6/7 也都是类似的循环小数,多位数超过n/7,就要进n下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

乘以7 的进位规律是:满 142857 (1)满 285714 (2)满 428571 (3)满 571428 (4)满 714285 (5)满 857142... 进6请分析程序流程,填写划线部分缺少的代码。

第五届蓝桥杯省赛b组试题及答案

第五届蓝桥杯省赛b组试题及答案

第五届蓝桥杯省赛b组试题及答案第五届蓝桥杯省赛B组试题及答案一、选择题(每题5分,共20分)1. 下列哪个选项是Python语言中用于定义函数的关键字?A. defB. functionC. funcD. declare答案:A2. 在HTML中,用于定义最重要的标题的标签是?A. <h1>B. <title>C. <header>D. <h6>答案:A3. 在JavaScript中,以下哪个方法用于获取数组中最后一个元素?A. last()B. first()C. pop()D. lastElement()答案:C4. 在CSS中,以下哪个属性用于设置元素的背景颜色?A. background-colorB. bg-colorC. colorD. back-color答案:A二、填空题(每题5分,共20分)1. 在Python中,用于执行条件判断的关键字是________。

答案:if2. 在HTML中,用于创建无序列表的标签是________。

答案:<ul>3. 在JavaScript中,用于获取当前日期的函数是________。

答案:new Date()4. 在CSS中,用于设置文本颜色的属性是________。

答案:color三、简答题(每题10分,共20分)1. 请解释什么是闭包,并给出一个简单的JavaScript闭包示例。

答案:闭包是一个函数和其周围的状态(词法环境)的组合。

闭包允许函数访问其定义时的作用域链,即使在其定义的作用域外执行。

示例:```javascriptfunction createClosure() {var secret = "I'm a secret";return function() {console.log(secret);};}var myClosure = createClosure();myClosure(); // 输出:I'm a secret```2. 请简述HTML5和HTML4的主要区别。

蓝桥杯初赛b组试题

蓝桥杯初赛b组试题

蓝桥杯初赛b组试题————————————————————————————————作者:————————————————————————————————日期:第一题结果填空3‘奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。

虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。

某抽奖活动的奖券号码是5位数(10-99),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

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

-题解:考试的时候写了个回溯法,然后屁颠屁颠的开始做下面一题了。

结果错了→_→1 #include <iostream>2using namespace std;3bool fuck(int t)4 {5while(t)6 {7if(t%10==4)return false;8 t/=10;9 }10return true;11 }12int main()13 {14int ans = 0, t = 10;15while(t<100)16if(fuck(t++))ans++;17 cout<<ans<<endl;18return0;19 }第一题正确答案:52488(我居然上来第一题就错了居然写了13440→_→)//cout<<8*9*9*9*9; →_→第二题结果填空5‘星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,定时为1天,请你计算它爆炸的准确日期。

请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。

比如:2015-02-19 请严格按照格式书写。

2023年蓝桥杯c语言b组题解

2023年蓝桥杯c语言b组题解

2023年蓝桥杯C语言B组题解1. 前言作为蓝桥杯C语言B组的竞赛题目,本次比赛题目涉及了软件开发、数据结构、算法等多方面的知识。

本文对2023年蓝桥杯C语言B组的题目进行详细的解析和讲解,帮助大家更好地理解题目要求和解题思路。

2. 题目一针对第一题目的要求是编写一个程序,实现对一组整数的排序。

这是一个经典的排序算法问题,可以使用冒泡排序、快速排序、插入排序等多种算法进行解题。

在解题过程中,首先需要明确题目的输入输出格式和范围,然后选择合适的排序算法进行实现,最后进行测试验证。

3. 题目二第二题目要求实现一个简单的文本编辑器程序,可以进行文本的插入、删除、替换等操作。

这是一个基础的字符串处理问题,需要熟练掌握字符串的操作方法和技巧。

在解题过程中,可以使用C语言提供的字符串处理函数,如strcpy、strcat、strlen等,同时需要注意内存管理和边界情况的处理。

4. 题目三第三题目是一个经典的递归算法问题,要求实现对一个整数的阶乘计算。

递归算法是C语言中的重要部分,对于解题者来说,需要熟练掌握递归的基本原理和实现方法。

在解题过程中,可以使用递归函数进行实现,同时要考虑递归的边界情况和性能优化。

5. 题目四最后一道题目是一个图论问题,要求实现一个简单的图数据结构,并进行深度优先搜索(DFS)和广度优先搜索(BFS)。

图论是计算机科学中重要的基础知识,需要熟练掌握图的表示方法、搜索算法等。

在解题过程中,可以使用邻接矩阵或邻接表表示图,然后编写DFS和BFS算法进行实现。

6. 总结通过本文的详细讲解,相信大家对2023年蓝桥杯C语言B组的题目有了更深入的理解和掌握。

在解题过程中,需要灵活运用C语言的各种技巧和算法知识,同时注重代码的风格和效率,才能更好地解决问题。

希望本文能对大家有所帮助,祝大家在蓝桥杯比赛中取得优异的成绩!7. 实例演练现在我们将通过实例来演示如何使用C语言来解决蓝桥杯C语言B组的题目。

第七届蓝桥杯CCB组题解

第七届蓝桥杯CCB组题解

第一题煤球数目有一堆煤球;堆成三角棱锥形..具体:第一层放1个;第二层3个排列成三角形;第三层6个排列成三角形;第四层10个排列成三角形;....如果一共有100层;共有多少个煤球请填表示煤球总数目的数字..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这道题坑死了;第一次看堆成三角棱锥形;草稿本画半天都没画出个三角棱锥..后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥..我去..看懂题目这个题目就很简单了;每层的个数是上层的个数加上层数;意思就是An = An-1 + n;然而题目是求的前100层一共多少煤球..所以是Sn.代码双重for循环就出来了..答案是:1717001.include<stdio.h>2.int main3.{4.int a101 ={0};5.for int i = 1 ; i < 101 ; i ++6. ai = ai-1 + i;7.int ans = 0;8.for int j = 1 ; j < 101 ; j ++9. ans += aj;10. printf"%d\n";ans;11.return 0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party;并且每次都要吹熄与年龄相同根数的蜡烛..现在算起来;他一共吹熄了236根蜡烛..请问;他从多少岁开始过生日party的请填写他开始过生日party的年龄数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..呵呵;水题;但是出题人不严谨啊怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了..蓝桥杯这种不像acm的题目的;能暴力直接暴力..不用想太多..直接从1~236 枚举 start; end 分别表示他开始过生日的年龄和今年的年龄;然后计算之间吹蜡烛的总和如果等于236就输出start ;end. 答案是:261.include<stdio.h>2.int main3.{4.int start;end;5.for start = 1 ; start < 236 ; start ++6. {7.for end = start ; end < 236 ; end ++8. {9.int sum = 0;10.for int i = start; i <= end; i ++11. sum += i;12.if sum == 23613. {14. printf"start : %dend : %d\n";start;end;15. }16. }17. }18.return 0;19.}第三题:凑算式B DEFA + — + -——— = 10C GHI如果显示有问题;可以参见图1.jpg这个算式中A~I代表1~9的数字;不同的字母代表不同的数字..比如:6+8/3+952/714 就是一种解法;5+3/1+972/486 是另一种解法..这个算式一共有多少种解法注意:你提交应该是个整数;不要填写任何多余的内容或说明性文字..这个题不多说了;直接暴力生成9的全排列然后去验证等式是否成立;只是验证的时候如果防止精度问题可以通分把除法变成乘法..答案是:291.include<stdio.h>2.int ans = 0;3.int num10;4.bool visit10;5.6.void Solve7.{8.double sum = num0 + double num1 / num2 + double num3100+num410+num5/num6100+num710+num8;9.if sum == 1010. {11. ans ++;12. }13.}14.15.void dfs int index16.{17.if index == 918. {19. Solve;20.return ;21. }22.for int i = 1 ; i < 10 ; i ++23. {24.if visiti25. {26. visiti = true;27. numindex = i;28. dfsindex+1;29. visiti = false;30. }31. }32.}33.34.int main35.{36. dfs0;37. printf"%d\n";ans;38.return 0;39.}第四题:快速排序排序在各种场合经常被用到..快速排序是十分常用的高效率的算法..其思想是:先选一个“标尺”;用它把整个队列过一遍筛子;以保证:其左边的元素都不大于它;其右边的元素都不小于它..这样;排序问题就被分割为两个子区间..再分别对子区间排序就可以了..下面的代码是一种实现;请分析并填写划线部分缺少的代码.. include <stdio.h>void swapint a; int i; int j{int t = ai;ai = aj;aj = t;}int partitionint a; int p; int r{int i = p;int j = r + 1;int x = ap;whilei<r && a++i<x;whilea--j>x;ifi>=j break;swapa;i;j;}______________________;return j;}void quicksortint a; int p; int r {ifp<r{int q = partitiona;p;r; quicksorta;p;q-1;quicksorta;q+1;r;}}{int i;int a = {5;13;6;24;2;8;19;27;6;12;1;17};int N = 12;quicksorta; 0; N-1;fori=0; i<N; i++ printf"%d "; ai;printf"\n";return 0;}注意:只填写缺少的内容;不要书写任何题面已有代码或说明性文字..这个题目如果接触过快排;了解过快速排序的原理的应该是送分题目;只不过快排单步就是将一堆数按照某个数作为基准数分成左右两堆这个实现方式有几种代码表现..在这里答案是swapa;p;j.第五题:抽签X星球要派出一个5人组成的观察团前往W星..A国最多可以派出4人..B国最多可以派出2人..C国最多可以派出2人......那么最终派往W星的观察团会有多少种国别的不同组合呢下面的程序解决了这个问题..数组a 中既是每个国家可以派出的最多的名额..程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....以下省略;总共101行include <stdio.h>define N 6define M 5define BUF 1024void fint a; int k; int m; char b {int i;j;ifk==N{ifm==0 printf"%s\n";b;return;}fori=0; i<=ak; i++{forj=0; j<i; j++ bM-m+j = k+'A';______________________; //填空位置}}int main{int aN = {4;2;2;1;1;3};char bBUF;fa;0;M;b;return 0;}仔细阅读代码;填写划线部分缺少的内容..注意:不要填写任何已有内容或说明性文字..这个题目是这样的;对于fint a;int k;int m;char b.a 是每个国家的最多指派人数;k表示当前是哪个国家;m表示还需要派送几个人可以为负数.b表示已经派送的人的字符串..所以这个题目在递归中间的的第一个循环表示从0~ai中让i国选择指派人数;内循环只是向b记录的过程..所以答案是fa;k+1;m-i;b. 因为这里I = j .应该 fa;k+1;m-j;b 也可以..第六题:方格填数如下的10个格子如果显示有问题;也可以参看图1.jpg填入0~9的数字..要求:连续的两个数字不能相邻..左右、上下、对角都算相邻一共有多少种可能的填数方案请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这个题目题目有点表述不明;不知道0~9 可不可以重复使用..我当时做的时候是当作不可以重复使用来处理的..那么这里我就先当作不可重复使用来讲解..这里题目还是一样先往里面填数..用生成排列的形式..填写完了之后再判断是否可行..答案是:15801.include <stdio.h>2.include <math.h>3.int flag34; //表示哪些可以填数4.int mpt34; //填数5.bool visit10;6.int ans = 0;7.void init //初始化8.{9.int i;j;10.for i = 0 ; i < 3 ; i ++11.for j = 0 ; j < 4 ; j ++12. flagij = 1;13. flag00 = 0;14. flag23 = 0;15.}16.17.void Solve18.{19.int dir82 ={ 0;1;0;-1;1;0;-1;0;1;1;1;-1;-1;1;-1;-1};20.int book = true;21.for int i = 0 ; i < 3 ; i ++22. {23.for int j = 0 ; j < 4; j ++24. {25.//判断每个数周围是否满足26.if flagij == 0continue;27.for int k = 0 ; k < 8 ; k ++28. {29.int x;y;30. x = i + dirk0;31. y = j + dirk1;32.if x < 0 || x >= 3 || y < 0 || y >= 4 || flagxy == 0 continue;33.if absmptxy - mptij == 1 book = false;34. }35. }36. }37.if book ans ++;38.}39.40.41.void dfs int index42.{43.int x;y;44. x = index / 4;45. y = index % 4;46.if x == 347. {48. Solve;49.return;50. }51.if flagxy52. {53.for int i = 0 ; i < 10 ; i ++54. {55.if visiti56. {57. visiti = true;58. mptxy = i;59. dfsindex+1;60. visiti = false;61. }62. }63. }64.else65. {66. dfsindex+1;67. }68.}69.int main70.{71. init;72. dfs0;73. printf"%d\n";ans;74.return 0;75.}第七题:剪邮票如图1; 有12张连在一起的12生肖的邮票..现在你要从中剪下5张来;要求必须是连着的..仅仅连接一个角不算相连比如;图2;图3中;粉红色所示部分就是合格的剪取..请你计算;一共有多少种不同的剪取方法..请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..其实这个题目还是可前面的一样;先生成;再判断是否可行..这里我们可以先用搜索从12个数里面将所有5个数的组合找出来..然后再用深搜判断这五个是否连在一起..答案是:1161.include <stdio.h>2.include <string.h>3.int mpt34;4.int mpt_visit34;5.int num6;6.int have13;7.int visit13;8.int ans = 0;9.int Count = 0;10.11.void init12.{13.int k = 1;14.for int i = 0 ; i < 3 ; i ++15.for int j = 0 ; j < 4 ; j ++16. {17. mptij = k;18. k ++;19. }20.}21.int dir42 = {0;1;0;-1;-1;0;1;0};22.//判断五个数是否能连在一起23.void dfs_find int x;int y24.{25.for int i = 0 ; i < 4 ; i++26. {27.int tx;ty;28. tx = x + diri0;29. ty = y + diri1;30.if tx < 0 || tx >= 3 || ty < 0 || ty >= 4 continue;31.if havempttxty == 0 || mpt_visittxty continue;32. mpt_visittxty = 1;33. Count ++;34. dfs_findtx;ty;35. }36.}37.38.void Solve39.{40.int i;41. memsethave;0;sizeof have;42. memsetmpt_visit;0;sizeof mpt_visit;43.for i = 1; i < 6 ; i ++ havenumi = 1;44.for i = 0 ; i < 12 ; i ++45. {46.int x;y;47. x = i / 4;48. y = i % 4;49.if havemptxy50. {51. Count = 1;52. mpt_visitxy =1;53. dfs_findx;y;54.break;55. }56. }57.if Count == 558. {59. ans ++;60. }61.}62.63.//创建5个数的组合64.void dfs_creat int index65.{66.if index == 667. {68. Solve;69.return;70. }71.for int i = numindex-1 + 1; i < 13 ; i ++72. {73.if visiti74. {75. visiti = true;76. numindex = i;77. dfs_creatindex+1;78. visiti = false;79. }80. }81.}82.83.int main84.{85. init;86. dfs_creat1;87. printf"%d\n";ans;88.return 0;89.}第八题:四平方和四平方和定理;又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和..如果把0包括进去;就正好可以表示为4个数的平方和..比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2^符号表示乘方的意思对于一个给定的正整数;可能存在多种平方和的表示法..要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a;b;c;d 为联合主键升序排列;最后输出第一个表示法程序输入为一个正整数N N<5000000要求输出4个非负整数;按从小到大排序;中间用空格分开例如;输入:5则程序应该输出:0 0 1 2再例如;输入:12则程序应该输出:0 2 2 2再例如;输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目很水也是搜索能做的..但是有点技巧;这里我贡献两个方法给大家参考..方法一:On^3/2.先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可..当然虽然这个题目是n^3/2看数据貌似过不了..但是貌似我找了几组数据都能秒出结果..应该是绝大多数最外层循环都不会太多..1.include <stdio.h>2.include <math.h>3.int main4.{5.int n;6.int flag = false;7. scanf"%d";&n;8.for int i = 0 ; i i <= n ; i ++9. {10.for int j = 0 ; j j <= n ; j ++{11.for int k = 0 ; k k <= n ; k ++12. {13.int temp = n - ii - jj - kk;14.double l = sqrt double temp;15.if l == int l16. {17.printf"%d %d %d %d\n";i;j;k;int l;18. flag = true;19.break;20. }21. }22.if flag break;23. }24.if flag break;25. }26.return 0;27.}方法二:On 的方法..这个方法是我在比赛的时候用的..先把两个平方数能相加的到的数字球出来然后记录..这样我们第三层循环就可以先判断再循环了..1.include <stdio.h>2.include <math.h>3.int mpt5000010 ={0}; //mpti = 1表示i 能够用两个完全平方数相加而得..4.int n;5.void init6.{7.for int i = 0 ; ii <= n ; i ++8.for int j = 0 ; jj <=n ; j ++9.if ii+jj <= n mptii+jj = 1;10.}11.int main12.{13.15. scanf"%d";&n;16. init;17.for int i = 0 ; i i <= n ; i ++18. {19.for int j = 0 ; j j <= n ; j ++{20.if mptn - ii - jj == 0 continue; //如果剩下的差用两个完全平方数不能组合出来就不继续21.for int k = 0 ; k k <= n ; k ++22. {23.int temp = n - ii - jj - kk;24.double l = sqrt double temp;25.if l == int l26. {27.printf"%d %d %d %d\n";i;j;k;int l;28. flag = true;29.break;30. }31. }32.if flag break;33. }35. }36.return 0;37.}第九题:交换瓶子有N个瓶子;编号 1 ~ N;放在架子上..比如有5个瓶子:2 13 5 4要求每次拿起2个瓶子;交换它们的位置..经过若干次后;使得瓶子的序号为:1 2 3 4 5对于这么简单的情况;显然;至少需要交换2次就可以复位..如果瓶子更多呢你可以通过编程来解决..输入格式为两行:第一行: 一个正整数NN<10000; 表示瓶子的数目第二行:N个正整数;用空格分开;表示瓶子目前的排列情况..输出数据为一行一个正整数;表示至少交换多少次;才能完成排序..例如;输入:53 1 2 5 4程序应该输出:3再例如;输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256MCPU消耗 < 1000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..啊啊这个题目最开始没看到最上面的那句话;以为输入的数字是随意的int.还做了离散化处理..后来看到了编号为1~n就觉得自己傻逼了..这个题目我用的贪心;从左向右如果当前第i个瓶子编号不是i就把编号为i的瓶子换过来..自己yy几发数据貌似都能过..不清楚是否对..因为这里的n规模为10000;如果在交换的时候去用for找编号为i的瓶子在哪儿时间复杂度为On^2会超时..所以这里要用两个数组;一个数组是记录第i个瓶子编号为多少;一个是记录编号为i的瓶子在哪儿..注意我们在交换的时候要把这两个数组都维护1.include <stdio.h>2.include <math.h>3.int arr10010;4.int flag10010;5.int main6.{7.int ans = 0;8.int n;i;9. scanf"%d";&n;10.for i = 1 ; i <= n ; i ++ scanf"%d";&arri;11.for i = 1 ; i <= n ; i ++ flagarri = i;12.for i = 1 ; i <= n ; i ++13. {14.if i = arri15. {16.int x = arri;17. arri ^= arrflagi ^= arri ^= arrflagi;18. flagi ^= flagx ^= flagi ^= flagx;19. ans ++;20. }21. }22. printf"%d\n";ans;23.return 0;24.}第十题:最大比例X星球的某个大奖赛设了M级奖励..每个级别的奖金是一个正整数..并且;相邻的两个级别间的比例是个固定值..也就是说:所有级别的奖金数构成了一个等比数列..比如:16;24;36;54其等比值为:3/2现在;我们随机调查了一些获奖者的奖金数..请你据此推算可能的最大的等比值..输入格式:第一行为数字N;表示接下的一行包含N个正整数第二行N个正整数XiXi<1 000 000 000 000;用空格分开..每个整数表示调查到的某人的奖金数额要求输出:一个形如A/B的分数;要求A、B互质..表示可能的最大比例系数测试数据保证了输入格式正确;并且最大比例是存在的..例如;输入:31250 200 32程序应该输出:25/4再例如;输入:43125 32 32 200程序应该输出:5/2再例如;输入:3程序应该输出:4/1资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目刚开始没准备做后来感觉时间蛮充裕的上次吃了时间的亏这次自己吧时间卡的比较死;一个小时做完了填空题;一个半小时做完了前面两道大题..所以还剩下一个半小时.想了一会儿感觉这个题可做..自己YY了一下..不保证一定正确;可以当作一个参考这个题目意思是相邻两个等级的奖金比例一定是一个相同的分数PP = A/B; A/B为最简分数.题目告诉了你n个人分别领取了多少奖金..让你算这个P最大为多少..我是这么处理的;我们先把n个人的奖金从大到小排序..剔除掉相同的相同的奖金只保留一个..然后前后做除用分数的形式保留前后两个数的比例..如何用分数表示两个数的最简分数呢..例如 A / B = A/GcdA;B / B/GcdA;B..只要把A;B最大公约数去除掉就可以了..现在得到了一堆堆分数Fsi然后怎么处理呢我们知道这些分数一定都满足一个条件就是 Fsi = P^ki 这里的ki是不定的..但是要使得求得P最大;那么一定是所有 ki 求最大公约数得到k' .结果就是 Pk'. 然而这道题数据太大了;并不容易求出这些分数对应的底数以及各自的指数..那么这个方案就不可取了..所以我们要的到结果并不能先求出k‘.但是我们看我们能不能直接求出P^k'. 这里我们先把分子分母分开处理..因为A/B是最简分数.. P^k' = A^k' / B^k'.我们先求A^k' .不知道大家还记不记得欧几里得游戏..这个游戏是这样的..黑板上有两个不同的正整数n;m..现在两个人轮流在黑板上写一个正整数要求这个正整数必须为黑板上某两个数的差并且没有在黑板上出现过..当某人无法再写下一个数的时候游戏结束..其实最后这个游戏本质就是看黑板上最多能写多少个数..事实上我们知道黑板上能写的数都是最开始两个数的最大公约数的倍数..所以黑板上最小的数也就是m;n的最大公约数..这里我们来看;假如我们先求A^k1;A^k2 指数对应的最大公约数..我们吧这个两个数做除法..发现为 A^k1-k2..发现是不是这个题目就转化为欧几里得游戏的填数游戏了..只不过加法改成了除法..所以当出发找到一个没有出现过的商的时候这些数种最小的就是当前的A^k'.然后依次对剩下的A^ki做相同操作就可以得到最终的A^ki;同样可以得到B^ki.最后输出 A^ki/B^ki即可..1.include <stdio.h>2.include <algorithm>3.include <queue>ing namespace std;5.define LL long long6.struct fs7.{8. LL up;down;9.};10.int n;11.LL arr110;12.fs Fs110;13.14.bool cmpLL a;LL b15.{16.return a > b;17.}18.19.LL GcdLL a;LL b20.{21.if b == 0 return a;22.return Gcdb;a%b;23.}24.LL GetLL a; LL b25.{26.if a < b a ^= b ^= a ^= b;27. LL v30;28. queue<LL>team;29.if a == b || a / b == a return b;30. v0 = a; v1 = b;31. v2 = a / b;32.int top = 3;i;j;33. team.pusha/b;34.while team.size35. {36. LL now = team.front;37. team.pop;38.for i = 0 ; i < top ; i ++39. {40. LL temp = vi > now vi / now : now / vi;41.bool find = false;42.for j = 0 ; j < top ; j ++43.if vj == temp find = true;44.if find == true continue;45. team.pushtemp;46. vtop++ = temp;47. }48. }49. LL ans = v0;50.for i = 0 ; i < top ; i ++51.if vi = 152. {53. ans = vi;54.break;55. }56.for i = 0 ; i < top ; i ++57.if vi < ans && vi = 1 ans = vi;58.return ans;59.}60.int main61.{62.int i;j;63. scanf"%d";&n;64.for i = 0 ; i < n ; i ++ scanf"%lld";&arri;65. sortarr;arr+n;cmp;66.int top = 1;67.for i = 1; i < n ; i ++68.if arri = arri-1 arrtop++ = arri;69. n = top;70.for i = 0 ; i < n - 1; i ++71. {72. LL gcd = Gcdarri;arri+1;73. Fsi.up = arri / gcd;74. Fsi.down = arri+1 / gcd;75. }76. LL x = Fs0.up;77.for i = 0 ; i < n - 1 ; i ++78. x = Getx;Fsi.up;79. LL y = Fs0.down;80.for i = 0 ; i < n - 1; i ++81. y = Gety;Fsi.down;82. printf"%lld/%lld\n";x;y;83.return 0;84.}。

蓝桥杯软件大赛c真题及参考答案

蓝桥杯软件大赛c真题及参考答案

第四届蓝桥杯软件大赛c/C++本科B组真题1.题目标题: 高斯日记大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。

这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113请你算出高斯获得博士学位的年月日。

提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21请严格按照格式,通过浏览器提交答案。

注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。

# include <stdio.h>int isLeap(int y);int nday(int y, int m, int d);void ymd(int n);int main(void){int n = 8113;int yb = 1777, mb = 4, db = 30; //birthn = n - 1 + nday(yb, mb, db);int yp, np; //printfor(int i = yb; n > 0; i++) {yp = i;np = n;if(isLeap(i)) n -= 366;else n -= 365;}printf("%d-", yp);ymd(np);return 0;}int nday(int y, int m, int d){int n = 0;int a[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};for(int i = 0; i < (m - 1); i++) n += a[isLeap(y)][i];n += d;return n;}void ymd(int n){int a[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int mp, dp;for(int i = 0; n > 0; i++) {dp = n; mp = i;n -= a[isLeap(i)][i]; }printf("%d-%d\n", mp + 1, dp);}int isLeap(int y){if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) return 1;else return 0;}最后答案1799-07-162.标题: 马虎的算式小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

第十二届蓝桥杯2021年省赛真题(CC++大学B组)

第十二届蓝桥杯2021年省赛真题(CC++大学B组)

第⼗⼆届蓝桥杯2021年省赛真题(CC++⼤学B组)第⼗⼆届蓝桥杯 2021年省赛真题 (C/C++ ⼤学B组)这次的难度⽐上次⼤,主要表现在数据量⼤。

填空题的后两道⽐较难。

⼤雪莱up主A 空间(进制转换)本题总分:5 分(√)问题描述⼩蓝准备⽤ 256MB 的内存空间开⼀个数组,数组的每个元素都是 32 位⼆进制整数,如果不考虑程序占⽤的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个 32 位⼆进制整数?答案提交这是⼀道结果填空的题,你只需要算出结果后提交即可。

本题的结果为⼀个整数,在提交答案时只填写这个整数,填写多余的内容将⽆法得分。

256 * 1024 * 1024* 8 / 32答案67108864B 卡⽚(模拟)本题总分:5 分(√)问题描述⼩蓝有很多数字卡⽚,每张卡⽚上都是数字 0 到 9。

⼩蓝准备⽤这些卡⽚来拼⼀些数,他想从 1 开始拼出正整数,每拼⼀个,就保存起来,卡⽚就不能⽤来拼其它数了。

⼩蓝想知道⾃⼰能从 1 拼到多少。

例如,当⼩蓝有 30 张卡⽚,其中 0 到 9 各 3 张,则⼩蓝可以拼出 1 到 10,但是拼 11 时卡⽚ 1 已经只有⼀张了,不够拼出 11。

现在⼩蓝⼿⾥有 0 到 9 的卡⽚各 2021 张,共 20210 张,请问⼩蓝可以从 1拼到多少?提⽰:建议使⽤计算机编程解决问题。

答案提交这是⼀道结果填空的题,你只需要算出结果后提交即可。

本题的结果为⼀个整数,在提交答案时只填写这个整数,填写多余的内容将⽆法得分。

思路构造专门的判定函数check。

代码#include<cstdio>#include<iostream>using namespace std;int s[10];bool check(int x){while(x){int t=x%10;x/=10;if(--s[t]<0) return false; //不够了}return true;}int main(){for(int i=0;i<10;i++){s[i]=2021;}for(int i=1;;i++){if(!check(i)) {cout<<i-1<<endl;return 0;}}return 0;}C 直线(枚举)本题总分:10 分问题描述在平⾯直⾓坐标系中,两点可以确定⼀条直线。

第七届蓝桥杯CC++B组省赛题目——方格填数

第七届蓝桥杯CC++B组省赛题目——方格填数

第七届蓝桥杯CC++B组省赛题⽬——⽅格填数第⼀部分:题⽬⽅格填数如下的10个格⼦+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显⽰有问题,也可以参看下图)填⼊0~9的数字。

要求:连续的两个数字不能相邻。

(左右、上下、对⾓都算相邻)⼀共有多少种可能的填数⽅案?请填写表⽰⽅案数⽬的整数。

注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。

第⼆部分:思路这个题⽬有点表述不明,不知道0~9 可不可以重复使⽤。

现在看来是不能重复使⽤的。

我的做法是把表格当做3⾏4列的数组,去掉⼀头⼀尾。

步骤:填数字->判断是否满⾜要求:相邻位置数字不能相邻。

需要注意的地⽅:保证数字没有重复使⽤:借助数组take,存储使⽤的数字,当所要填写的数字不在数组中时才可以填⼊。

填⼊后存进数组。

判断是否满⾜相邻位置数字不能相邻的要求。

看代码注释。

答案是:1580第三部分:代码#include<stdio.h>#include<stdlib.h>int count=0;int take[10],index=0;//记录当前已经填⼊的数字,⽤于填数字前判断是否已经使⽤,避免重复使⽤int is_legal(int s[3][4])//判断是否满⾜要求:相邻位置数字不能相邻,就是两数字的差⼤于1.就是为什么s[0][0]、s[2][3]置为-2;{//这⾥的判断⽅法有点死板。

假设每个位置都有上下左右和对⾓,只需要判断这些位置//是不是在数组中,在就进⾏⽐较,不在就说明没有。

for(int i=0;i<3;i++){for(int j=0;j<4;j++){if(j-1>=0){if(abs(s[i][j]-s[i][j-1])==1){return0;}}if(j+1<4){if(abs(s[i][j]-s[i][j+1])==1){return0;}}if(i+1<3){if(abs(s[i][j]-s[i+1][j])==1){return0;}}if(j-1>=0&&i+1<3){if(abs(s[i][j]-s[i+1][j-1])==1){return0;}}if(j+1<4&&i+1<3){if(abs(s[i][j]-s[i+1][j+1])==1){return0;}}if(i-1>=0&&j+1<4){if(abs(s[i][j]-s[i-1][j+1])==1){return0;}}if(i-1>=0){if(abs(s[i][j]-s[i-1][j])==1){return0;}}if(j-1>=0&&i-1>=0){if(abs(s[i][j]-s[i-1][j-1])==1){return0;}}}}return1;}void fun(int s[3][4],int a,int b){int i;if(a==2&&b==3)//表⽰当前已经填满了表格,需要进⾏判断看是否满⾜要求{if(is_legal(s)){count++;}}else//继续填写{for(i=0;i<=9;i++){int j;for(j=0;j<index;j++)//填写的数字必须是没有⽤过的{if(i==take[j]){break;}}if(j==index){s[a][b]=i;take[index++]=i;if(b<3)//表⽰当前⾏还没填完{fun(s,a,b+1);}else//当前⾏填完就从下⼀⾏开始{if(a<2)//判断当前⾏是否是最后⼀⾏{fun(s,a+1,0);}}index--;//在⼀次填满结束后,当前位置的数字换为其他可以填写的数字 //所以当前使⽤的数字需要出去。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蓝桥杯C语言本科B组预赛试题————————————————————————————————作者:————————————————————————————————日期:2014蓝桥杯C/C++语言本科B组预赛试题(完整)1.啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

2.切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

3.李白打酒话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。

他边走边唱:无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。

则:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。

答案是个整数。

不要书写任何多余的内容。

4.史丰收速算史丰收速算法的革命性贡献是:从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!速算的核心基础是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:0.142857...,如果多位数超过142857...,就要进1同理,2/7,3/7, ...6/7 也都是类似的循环小数,多位数超过n/7,就要进n下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

乘以7 的进位规律是:满142857...进1,满285714 (2)满428571... 进3,满571428... 进4,满714285... 进5,满857142... 进6请分析程序流程,填写划线部分缺少的代码。

//计算个位intge_wei(int a){if(a % 2 ==0)return (a * 2) % 10;elsereturn (a * 2+ 5)%10;}//计算进位intjin_wei(char* p){char* level[] = {"142857","285714","428571","571428","714285","857142"};char buf[7];buf[6]='\0';strncpy(buf,p,6);int i;for(i=5; i>=0; i--){int r= strcmp(level[i], buf);if(r<0) return i+1;while(r==0){p += 6;strncpy(buf,p,6);r = strcmp(level[i], buf);if(r<0) return i+1;______________________________;//填空}}return 0;}//多位数乘以7void f(char* s){inthead = jin_wei(s);if(head > 0) printf("%d", head);char* p= s;while(*p){int a=(*p-'0');int x = (ge_wei(a)+jin_wei(p+1)) %10;printf("%d",x);p++;}printf("\n");}intmain(){f("428571428571");f("34553834937543");return0;}注意:通过浏览器提交答案。

只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字)5. 打印图形小明开动脑筋,编写了如下的程序,实现该图形的打印。

#defineN 70voidf(chara[][N],intrank, int row,int col) {if(rank==1){a[row][col] ='*';return;}int w = 1;int i;for(i=0;i<rank-1;i++) w*= 2;____________________________________________;f(a,rank-1, row+w/2,col);f(a, rank-1, row+w/2, col+w);}intmain(){chara[N][N];int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++) a[i][j]= ' ';f(a,6,0,0);for(i=0; i<N;i++){for(j=0;j<N; j++) printf("%c",a[i][j]);printf("\n");}return 0;}请仔细分析程序逻辑,填写缺失代码部分。

通过浏览器提交答案。

注意不要填写题目中已有的代码。

也不要写任何多余内容(比如说明性的文字)6.奇怪的分式上小学的时候,小明经常自己发明新算法。

一次,老师出的题目是:1/4乘以8/5小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45(参见图1.png)老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、分母都是1~9 中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1乘以5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2乘以3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。

请通过浏览器提交。

不要书写多余的内容。

7.六角填数如图【1.png】所示六角形中,填入1~12的数字。

使得每条直线上的数字之和都相同。

图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?请通过浏览器提交答案,不要填写多余的内容。

8. 蚂蚁感冒长100厘米的细长直杆子上有n只蚂蚁。

它们的头有的朝左,有的朝右。

每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

这些蚂蚁中,有1只蚂蚁感冒了。

并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

【数据格式】第一行输入一个整数n(1<n <50), 表示蚂蚁的总数。

接着的一行是n个用空格分开的整数Xi (-100 <Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。

正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。

其中,第一个数据代表的蚂蚁感冒了。

要求输出1个整数,表示最后感冒蚂蚁的数目。

例如,输入:35 -28程序应输出:1再例如,输入:5-10 8 -20 12 25程序应输出:3资源约定:峰值内存消耗< 256MCPU消耗< 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中#include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

9. 地宫取宝X国王有一个地宫宝库。

是n x m 个格子的矩阵。

每个格子放一件宝贝。

每个宝贝贴着价值标签。

地宫的入口在左上角,出口在右下角。

小明被带到地宫的入口,国王要求他只能向右或向下行走。

走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。

请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。

【数据格式】输入一行3个整数,用空格分开:n m k(1<=n,m<=50, 1<=k<=12)接下来有n行数据,每行有m 个整数Ci(0<=Ci<=12)代表这个格子上的宝物的价值要求输出一个整数,表示正好取k个宝贝的行动方案数。

该数字可能很大,输出它对1000000007 取模的结果。

例如,输入:2 2 21 22 1程序应该输出:2再例如,输入:23 21 2 32 1 5程序应该输出:14资源约定:峰值内存消耗< 256MCPU消耗< 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0注意: 只使用ANSI C/ANSIC++标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意:所有依赖的函数必须明确地在源文件中#include <xxx>,不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

10. 小朋友排队n个小朋友站成一排。

现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。

每个小朋友都有一个不高兴的程度。

开始的时候,所有小朋友的不高兴程度都是0。

如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。

当要求某个小朋友第k次交换时,他的不高兴程度增加k。

请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。

如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。

【数据格式】输入的第一行包含一个整数n,表示小朋友的个数。

第二行包含n 个整数H1 H2 …Hn,分别表示每个小朋友的身高。

输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。

例如,输入:33 2 1程序应该输出:9【样例说明】首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。

相关文档
最新文档