请问有往届蓝桥杯试题吗,C本科组的,最好有答案呀~~~发我邮箱:447472614@qq.com
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问有往届蓝桥杯试题吗,C本科组的,最好有答案呀~~~发我邮箱:447472614@qq.com相关的知识,希望对你有一定的参考价值。
注意:本套模拟题主要模拟命题形式与考核范围。真实竞赛题的数量、难度可能与此套模拟题有差异。
说明:
本试卷包含两种题型:“代码填空”与“程序设计”。
填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号)。
编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。
代码填空(满2分)
形如:“abccba”,“abcba”的串称为回文串,下列代码判断一个串是否为回文串。请补充空白的部分。
char buf[] = "abcde11edcba";
int x = 1;
for(int i=0; i<strlen(buf)/2; i++)
if(___________________)
x = 0;
break;
printf("%s\n", x ? "是":"否");
代码填空(满分3分)
下列代码把一个二进制的串转换为整数。请填写缺少的语句;
char* p = "1010110001100";
int n = 0;
for(int i=0;i<strlen(p); i++)
n = __________________;
printf("%d\n", n);
代码填空(满分3分)
假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。
if(a>b) swap(&a, &b);
if(b>c) swap(&b, &c);
______________________;
int m = b;
代码填空(满分6分)
下面函数的目的是求出某个日期是该年度的第几天。试完善之。
如果传入:year=1980,month=1, day=1
则返回 1
如果传入:year=1980,month=2, day=1
则返回 32
int getDayOfYear(int year, int month, int day)
int days _____________________;
int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
int sum = day ;
for(int i=0;i<month;i++)
sum += days[flag][i];
return sum;
代码填空(满分7分)
计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域。但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。请完善它。
int f(int m, int n)
if(m==0 || n==0) return 1;
return _______________________;
代码填空(满分10分)
(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
int f(int m, int n)
if(m==0) return 1;
if(n==0 || n==m) return 1;
return __________________________;
程序设计(满分15分)
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
程序设计(满分9分)
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31
程序设计(满分 12 分)
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如,卡号是:5432123456788881
则奇数、偶数位(用红色标出)分布:5432123456788881
奇数位和=35
偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70 可以被10整除,认定校验通过。
请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
比如,用户输入:356827027232780
程序输出:成功
程序设计(满分 20 分)
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。 参考技术A 码的错误挺多的。。。额,我的vc不允许在中间定义,所以你的定义我都改到前面去了。
int i=0;这一句,之前已经定义过了,如果只是要改i的值直接i = 0;就够了,否则再定义过一个吧。
MP=(2*0.5*P*sqrt(R1*h1)/1000+tb*R-tf*R)/1000;大小写问题,把p改小写。
r=sqrt(h/R1)*tan(0.5*atan(sqrt((1-h/H)/(h/H))-0.25/f*sqrt(h/R1)*log(1/(h/H))*b);这句少了一个括号,我不知道你的公式,随便加了一个括号。
float kang 函数中m的大小写问题。
printf("轧制力P=%fN\n 变形抗力K=%fMp\n 张力影响因子n=%f\n 应力状态系数Q=%f\n
轧制力矩Mp=%fKN\n 前滑Sh=%f\n",P,K,n,Q,Mp,Sh);
这一句首先不能换行,不然编译器看不懂,还有,N,Mp这些单位和数字之间尽量空开来~~
这是我改完后的代码,编译器通过了,不过我没有执行。
第十三届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)
蓝桥杯 2022年省赛真题
C/C++ 大学B组
- 试题 A: 九进制转十进制
- 试题 B: 顺子日期
- 试题 C: 刷题统计
- 试题 D: 修剪灌木
- 试题 E: X 进制减法
- 试题 F: 统计子矩阵
- 试题 G: 积木画
- 试题 H: 扫雷
- 试题 I: 李白打酒加强版
- 试题 J: 砍竹子
虽然我的 J a v a \\mathrmJava Java 组的,但怕被查重,等成绩公布了再做 J a v a \\mathrmJava Java 的题解吧。
试题 A: 九进制转十进制
本题总分: 5 5 5 分
【问题描述】
九进制正整数 ( 2022 ) 9 (2022)_9 (2022)9 转换成十进制等于多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
1478
#include <stdio.h>
int main()
int c, ans = 0;
while (c = getchar(), '0' <= c && c <= '9')
ans = ans * 9 + c - '0';
printf("%d", ans);
凭什么都是双非, C \\mathrm C C 的签到难度这么低。
不公平不公平,重赛!重赛!
试题 B: 顺子日期
本题总分: 5 5 5 分
【问题描述】
小明特别喜欢顺子。顺子指的就是连续的三个数字 : 123 、 456 :123、456 :123、456 等。顺子日期指的就是在日期的 y y y y m m d d \\mathrmyyyymmdd yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 20220123 20220123 就是一个顺子日期,因为它出现了一个顺子: 123 123 123;而 20221023 20221023 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 2022 2022 年份中,一共有多少个顺子日期。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
14
#include <stdio.h>
int year = 20220000, date, ans;
int days[13] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 , buff[8];
int main()
for (int month = 1; month <= 12; ++month)
for (int day = 1; day <= days[month]; ++day)
date = year + 100 * month + day;
for (int i = 0; i < 8; ++i)
buff[i] = date % 10, date /= 10;
for (int i = 1; i < 7; ++i)
if (buff[i] - buff[i + 1] == 1 &&
buff[i - 1] - buff[i] == 1)
++ans;
break;
printf("%d", ans);
虽然从题目描述中,无法直观的感受到所谓的顺子,是否包括如 321 321 321 这样递减的连续自然数列,但描述给出的样例 20221023 20221023 20221023 中包含了 210 210 210,基本上可以认为答案中不包含递减的连续自然数列的统计,但同时还有另一个问题,那就是顺子中能否包含 0 0 0。
总之,我认为是能包含 0 0 0 的,不愧是蓝桥,
题面做的真是有够失败的呢。
试题 C: 刷题统计
时间限制: 1.0 s 1.0\\mathrm s 1.0s 内存限制: 256.0 M B 256.0\\mathrmMB 256.0MB 本题总分: 10 10 10 分
【问题描述】
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a a 道题目,周六和周日每天做 b b b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n n n 题?
【输入格式】
输入一行包含三个整数 a , b a, b a,b 和 n n n。
【输出格式】
输出一个整数代表天数。
【样例输入】
10 20 99
【样例输出】
8
【评测用例规模与约定】
对于
50
%
50\\%
50% 的评测用例,
1
≤
a
,
b
,
n
≤
1
0
6
1 ≤ a, b, n ≤ 10^6
1≤a,b,n≤106。
对于
100
%
100\\%
100% 的评测用例,
1
≤
a
,
b
,
n
≤
1
0
18
1 ≤ a, b, n ≤ 10^18
1≤a,b,n≤1018。
#include <stdio.h>
long long a, b, n, ans;
int main()
scanf("%lld %lld %lld", &a, &b, &n);
ans = n / (5 * a + 2 * b) * 7;
n %= 5 * a + 2 * b;
if (n > 5 * a)
ans += 5 + ((n - 5 * a) + b - 1) / b;
else
ans += (n + a - 1) / a;
printf("%lld", ans);
没啥好说的,
一个 a / b a\\ /\\ b a / b 向上取整的小技巧就是 ( a + b − 1 ) / b (a + b - 1)\\ /\\ b (a+b−1) / b 向下取整。
试题 D: 修剪灌木
时间限制: 1.0 s 1.0\\mathrm s 1.0s 内存限制: 256.0 M B 256.0\\mathrmMB 256.0MB 本题总分: 10 10 10 分
【问题描述】
爱丽丝要完成一项修剪灌木的工作。
有 N N N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 0 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 0 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
【输入格式】
一个正整数 N N N ,含义如题面所述。
【输出格式】
输出 N N N 行,每行一个整数,第行表示从左到右第 i i i 棵树最高能长到多高。
【样例输入】
3
【样例输出】
4
2
4
【评测用例规模与约定】
对于
30
%
30\\%
30% 的数据,
N
≤
10
N ≤ 10
N≤10。
对于
100
%
100\\%
100% 的数据,
1
<
N
≤
10000
1 < N ≤ 10000
1<N≤10000。
#include <stdio.h>
int n;
int max(int a, int b) return a > b ? a : b;
int main()
scanf("%d", &n);
if (n == 1) putchar('1');
else for (int i = 1; i <= n; ++i)
printf("%d ", 2 * max(i - 1, n - i));
一颗灌木可以长到的最高高度,可能为:
1. 在它第一次被修剪之前
2. 它在某一次被修剪后,在此被修剪之前。
对于第二种情况,很容易分类出第 i i i 个灌木 t i t_i ti 的最高高度为 max 2 × ( i − 1 ) , 2 × ( n − i ) \\max\\2 × (i - 1),2 × (n-i)\\ max2×(i−1),2×(n−i),即对应着爱丽丝从左端点折返和爱丽丝从右端点折返 t i t_i ti 能达到的最高高度的取值。
同时 2 × ( i − 1 ) ≤ i 2 × (i - 1) \\leq i 2×(i−1)≤i,仅在 i ≤ 1 i \\leq 1 i≤1 成立,故对于第一种情况,无需额外的判断,直接取第二种情况的最大值即可。
试题 E: X 进制减法
时间限制: 1.0 s 1.0\\mathrm s 1.0s 内存限制: 256.0 M B 256.0\\mathrmMB 256.0MB 本题总分: 15 15 15 分
【问题描述】
进制规定了数字在数位上逢几进一。
X X X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X X X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X X X 进制数 321 321 321 转换为十进制数为 65 65 65。
现在有两个 X X X 进制表示的整数 A A A 和 B B B,但是其具体每一数位的进制还不确定,只知道 A A A 和 B B B 是同一进制规则,且每一数位最高为 N N N 进制,最低为二进制。请你算出 A − B A − B A−B 的结果最小可能是多少。
请注意,你需要保证 A A A 和 B B B 在 X X X 进制下都是合法的,即每一数位上的数字要小于其进制。
【输入格式】
第一行一个正整数 N N N,含义如题面所述。
第二行一个正整数 M a M_a Ma,表示 X X X 进制数 A A A 的位数。
第三行 M a M_a Ma 个用空格分开的整数,表示 X X X 进制数 A A A 按从高位到低位顺序各个数位上的数字在十进制下的表示。
第四行一个正整数 蓝桥杯往年本科java试题。。。 非常感谢
今年刚参加蓝桥杯,发现分了本科A组和本科B组,我想知道这两组题目的难度有啥不同??