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

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

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; //分子或分母中有一个的最大公约数不是1
	return 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; //偶数次循环,第一行的数为左边一个数加1
			for (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; //奇数次循环,第一行的数为上边一个数加1
			for (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设为6
	for (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; //满足条件时跑2km
				else miles = miles + 1; //其余情况跑1km

				if (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) continue; //要从输入日期的后一天开始判断
			for (int day = 1; day <= days[month - 1] && (find1 == false || find2 == false); day++) //日
			{
				if (year == a && month == b && day <= c) continue; //要从输入日期的后一天开始判断
				//使用三目运算符进行判断,将整型的数字拼接成“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;
}

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值