蓝桥杯2020年第十一届C/C++B组(第二次)省赛习题题解

目录

试题A.门牌制作(拆分数字)

试题 B 既约分数(gcd)

试题C 蛇形填数(数学)

试题D 跑步锻炼(模拟) 

试题E 七段码(图论+并查集)

 试题F:成绩统计(格式化输出)

 试题G:回文日期(模拟)

试题H:子串分值和(哈希+乘法原理+数学)

试题I:平面切分(数学)

 试题J:字串排序(dp)



试题来源:蓝桥杯2020第十一届C语言B组省赛习题题解_shall_zhao的博客-CSDN博客_蓝桥杯c语言题目


试题A.门牌制作(拆分数字)

 思路解析:遍历1~2020,统计每个数字中2的次数,运用到拆分数字的基本算法

#include<iostream>
using namespace std;

int cal(int num)
{
	int cnt = 0;
	while (num)
	{
		int j = num % 10;
		if (j == 2) cnt++;
		num /= 10;
	}
	return cnt;
}

int main()
{
	int res = 0;
	for (int i = 1; i <= 2020; i++)
	{
		res += cal(i);
	}

	cout << res << endl;//答案为624

	return 0;
}

试题 B 既约分数(gcd)

 思路解析:两层内外循环遍历1~2020,用欧几里得算法判断是否是两数的最大公约数为1,统计个数即可

#include<iostream>
using namespace std;

int gcd(int a, int b)
{
	return b ? gcd(b, a % b) : a;
}

int main()
{
	int res = 0;
	for(int i=1;i<=2020;i++)
		for (int j = 1; j <= 2020; j++)
		{
			if (gcd(i, j) == 1) res++;
		}
	cout << res << endl;//答案为:2481215

	return 0;
}

试题C 蛇形填数(数学)

问题: 根据此规律,推断第20行20列的数字是多少,其中第2行第2列的数字为5

 思路解析:

(1)对于奇数行有:比如说数字‘4’的那一行,则有:从它向它的右上角方向依次+1

(2)对于偶数行有:比如说数字‘10’的那一行,则有:从它向它的右上角方向依次-1

那么同理:

(3)对于奇数列有:比如说数字‘6’的那一列,则有:从它向它的左下角方向依次-1

(4)对于偶数列有:比如说数字‘7’的那一列,则有:从它向它的左下角方向依次+1

那么就有:

定义一个计数器cnt=1,循环for一次,同时枚举(i)行数和列数,如果这个(i)为奇数,那么就让它对应(1)情况,让它向右上角方向++;同理如果这个(i)为偶数,那么就让它对应(4)情况,让它向它的左下角方向++,其中是将cnt的值赋给这个二维数组,并++,最后输出对应行数和列数即可

#include<iostream>
using namespace std;
const int N = 110;
int a[N][N];

int main()
{
	int cnt = 1;
	int x, y;
	for (int i = 1; i <= N; i++)
	{
		if (i % 2 == 1)
		{
			for (x = i, y = 1; x >= 1 && y <= i; x--, y++)
			{
				a[x][y] = cnt++;
			}
		}
		else
		{
			for (x = 1, y = i; x <= i && y >= 1; x++, y--)
			{
				a[x][y] = cnt++;
			}
		}
	}
	cout << a[20][20] << endl;

	return 0;
}

试题D 跑步锻炼(模拟) 

问题:

 思路解析:

最外层循环枚举年份ÿ

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值