蓝桥杯省赛习题练习(二)

news/2024/12/22 20:49:31/

题目来源:2020年真题题集(B组)
注:代码都是自己写的,不是参考答案!

目录

  • 1. 门牌制作
    • 运行结果
  • 2. 既约分数
    • 运行结果
  • 3. 蛇形填数
    • 运行结果
  • 4. 跑步锻炼
    • 运行结果
  • 5. 7段码
  • 6. 成绩统计
    • 运行结果
  • 7. 回文日期
    • 运行结果

1. 门牌制作

题目描述:小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

#include<stdio.h>
int main()
{int count = 0,n;for (int num = 1; num <= 2020; num++){n = num;while (n > 0){if (n % 10 == 2) count++;n /= 10;}}printf("要制作所有的1到2020号门牌,总共需要%d个字符2", count);return 0;
}

运行结果

2. 既约分数

题目描述:如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如 1/7 , 3/4 , 1/8 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1和 2020)?

#include<iostream>
using namespace std;bool check(int m, int n)
{for (int i = 2; i <= 2020; i++)if (m % i == 0 && n % i == 0) return false; //分子或分母中有一个的最大公约数不是1return true;
}int main()
{int count = 0;for (int i = 1; i <= 2020; i++)for (int j = 1; j <= 2020; j++)if (check(i, j)) count++;cout << "分子和分母都是1到2020之间的整数中有" << count << "个既约分数" ;return 0;
}

运行结果

3. 蛇形填数

题目描述: 如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20行第20列的数是多少?
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …

#include<stdio.h>
int main()
{int arr[50][50] = { 0 }, i, j, m, n;arr[1][1] = 1;for (i = 2; i <= 40; i++){if (i % 2 == 0) //偶数次循环的话,斜向下累加{m = 1; n = i;arr[1][i] = arr[1][i - 1] + 1; //偶数次循环,第一行的数为左边一个数加1for (j = 1; j < i; j++)arr[++m][--n] = arr[m - 1][n + 1] + 1; //从第二行开始斜向下累加}else //奇数次循环的话,斜向上累加{m = i; n = 1;arr[i][1] = arr[i - 1][1] + 1; //奇数次循环,第一行的数为上边一个数加1for (j = 1; j < i; j++)arr[--m][++n] = arr[m + 1][n - 1] + 1; //从第二列开始斜向上累加}}printf("矩阵中第20行第20列的数是:%d", arr[20][20]);return 0;
}

运行结果

arr[1][1]=1²+0²
arr[2][2]=2²+1²
arr[3][3]=3²+2²
…arr[20][20]=20²+19²

4. 跑步锻炼

题目描述:小蓝每天都锻炼身体。正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米?

#include <iostream>
using namespace std;
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool flag = true; //循环结束标志void IsLeapYear(int year)
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) days[1] = 29; //闰年29天else days[1] = 28; //平年28天
}int main()
{int miles = 0, count = 6; //2000年1月1日为周六,因此count设为6for (int year = 2000; year <= 2020 && flag == true; year++) //年份{IsLeapYear(year); //判断该年是否为闰年for (int month = 1; month <= 12 && flag == true; month++) //月份{for (int day = 1; day <= days[month - 1] && flag == true; day++) //天数{if (year == 2020 && month == 10 && day > 1) //2020年10月2日{flag = false; //循环结束break;}if (count == 1 || day == 1 || count == 1 && day == 1) miles = miles + 2; //满足条件时跑2kmelse miles = miles + 1; //其余情况跑1kmif (count % 7 == 0) count = 1; //每周一循环else count++; //count用来判断该天是周几}}}cout << "这段时间小蓝总共跑步" << miles << "千米";return 0;
}

运行结果

5. 7段码

题目描述:小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。 例如:b 发光,其他二极管不发光可以用来表达一种字符。 例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。 例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。 请问,小蓝可以用七段码数码管表达多少种不同的字符?

6. 成绩统计

题目描述:小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。如果得分至少是60分,则称为及格。如果得分至少为85分,则称为优秀。请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

#include<stdio.h>
#include<math.h>
int main()
{int student, arr[2] = {0},rate[2];float score;printf("Please input the student number:");scanf_s("%d", &student);printf("Please enter the student scores:\n");for (int i = 0; i < student; i++){scanf_s("%f", &score);if (score >= 85) arr[0]++; //统计"优秀"的人数if (score >= 60) arr[1]++; //统计"及格"的人数}rate[1] = (round)((float)arr[1] / student * 100); //及格率rate[0] = (round)((float)arr[0] / student * 100); //优秀率printf("%d%% %d%%", rate[1],rate[0]);
}

运行结果

7. 回文日期

2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202即2021年12月2日。也有人表示20200202并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100年后就能遇到下一个ABABBABA型的回文日期:21211212即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。

#include <iostream>
#include<string>
using namespace std;
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };void IsLeapYear(int year)
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) days[1] = 29; //闰年29天else days[1] = 28; //平年28天
}int main()
{string date; //将输入的日期设置为字符串cout << "Please enter the date:";cin >> date;int a, b, c;a = (date[0] - '0') * 1000 + (date[1] - '0') * 100 + (date[2] - '0') * 10 + (date[3] - '0'); //提取输入日期中的年份if (date[4] == '0') b = date[5] - '0'; //提取输入日期中的月份else b = (date[4] - '0') * 10 + (date[5] - '0');if (date[6] == '0') c = date[7] - '0'; //提取输入日期中月份的天数else c = (date[6] - '0') * 10 + (date[7] - '0');bool find1 = false, find2 = false; //设置两个布尔类型,表示回文日期和ABABBABA型的回文日期是否找到for (int year = a; find1 == false || find2 == false; year++) //年{IsLeapYear(year); //判断该年是否为闰年for (int month = 1; month <= 12 && (find1 == false || find2 == false); month++) //月{if (year == a && month < b) break; //要从输入日期的后一天开始判断for (int day = 1; day <= days[month - 1] && (find1 == false || find2 == false); day++) //日{if (year == a && month < b && day < c) break; //要从输入日期的后一天开始判断//使用三目运算符进行判断,将整型的数字拼接成“yyyymmdd”格式的字符串string str = to_string(year) + (to_string(month).size() == 2 ? to_string(month) : "0" + to_string(month)) + (to_string(day).size() == 2 ? to_string(day) : "0" + to_string(day));for (int i = 0; i < 4; i++) //寻找输入日期后的第一个回文日期{if (find1 == true || (find1 == false && str[i] != str[7 - i])) break; //不满足回文日期条件时,天数往后推一天if (i == 3) //满足回文日期的条件{find1 = true; //找到了回文日期cout << str << endl;}}for (int i = 0; i < 4; i++) //寻找输入日期后的第一个ABABBABA型回文日期{if (find2 == true || (find2 == false && (str[i] != str[7 - i] || str[0] != str[2] || str[1] != str[3]))) break; //不满足ABABBABA型回文日期条件时,天数往后推一天if (i == 3) //满足ABABBABA型回文日期的条件{find2 = true; //找到了ABABBABA型回文日期cout << str;}}}}}return 0;
}

运行结果


http://www.ppmy.cn/news/11725.html

相关文章

【OpenAI】基于 Gym-CarRacing 的自动驾驶项目 | 车道检测功能的实现 | 边缘检测与分配 | 样条拟合

限时开放&#xff0c;猛戳订阅&#xff01; &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a; 本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D…

干货 | 涉疫数据的安全应用方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;涉疫数据分类及问题剖析一、涉疫数据分类我们以新冠肺炎疫情为例&#xff0c;构建数据图谱&#xff0c;将涉疫数据分为三个大类&#xff0c;八个小类&#xff0c;共分为50项…

Linux实用命令

进程相关当程序运行在系统上时&#xff0c;我们称之为进程&#xff08;process&#xff09;。想监测这些进程&#xff0c;需要熟悉 ps/top 等命令的用法。ps 命令好比工具中的瑞士军刀&#xff0c;它能输出运行在系统上的所有程序的许多信息。而 top 可以监控当前各个进程的运行…

vue报错汇总

项目场景&#xff1a; 使用vue报错汇总。 1、项目启动不报错也不成功 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 项目启动时&#xff0c;一直启动不成功&#xff0c;末句提示 98% emitting Copyplugin… 原因分析&#xff1a; 最有可能是因为require或者import了…

JAVA01_11学习总结(MyBatis-优化)

今日内容 1. MyBatis日志 MyBatis日志日志是我们纠察改错的有力工具1)导入日志的jar包--使用log4j2)配置日志的核心配置文件3)将日志输出并查看 2. 不适用MyBatis自带的连接池,使用德鲁伊 MyBatis的连接池来源-PooledDataSourceFactory是MyBatis自带的数据源工厂-无参构造,…

Tomcat 性能优化建议

修改Tomcat Connector运行模式为apr Tomcat Connector有三种运行模式&#xff1a; bio&#xff1a;阻塞IO bio是三种运行模式中性能最低第一种。 nio&#xff1a;是一个基于缓冲区&#xff0c;并能提供非阻塞I/O操作的JAVA API 因此NIO也成为非阻塞I/O&#xff0c;比bio拥有更…

高等数学(第七版)同济大学 习题11-7 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题11-7 函数作图软件&#xff1a;Mathematica 1.试对曲面Σ&#xff1a;zx2y2&#xff0c;x2y2≤1&#xff0c;Py2&#xff0c;Qx&#xff0c;Rz2验证斯托克斯公式.\begin{aligned}&1. \ 试对曲面\Sigma&#xff1a;zx^…

Makefile编译选项:CFLAGS、LDFLAGS、LIBS

目录 一、CFLAGS 二、LDFLAGS 三、LIBS 四、参考资料 前言 本文只涉及cflags、ldflags、libs&#xff0c;关于makefile文件非常建议看看大神写的系列博客《跟我一起写Makefile》: 跟我一起写 Makefile&#xff08;一&#xff09;_haoel的博客-CSDN博客 一、CFLAGS 指定…