题解:P8727 [蓝桥杯 2020 国 A] 填空问题








目录

P8727 [蓝桥杯 2020 国 A] 填空问题

题目描述

试题 A :合数个数

【问题描述】

一个数如果除了 1 1 1 和自己还有其他约数,则称为一个合数。例如: 1 , 2 , 3 1,2,3 1,2,3 不是合数,4,6 是合数。

请问从 1 1 1 到 2020 2020 2020 一共有多少个合数。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题 B :含 2 2 2 天数

【问题描述】

小蓝特别喜欢 2 2 2 ,今年是公元 2020 2020 2020 年,他特别高兴,因为每天日历上都可以看到 2 2 2 。

如果日历中只显示年月日,请问从公元 1900 1900 1900 年 1 1 1 月 1 1 1 日到公元 9999 9999 9999 年 12 12 12 月 31 31 31 日,一共有多少天日历上包含 2 2 2 。即有多少天中年月日的数位中包含数字 2 2 2 。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题 C :本质上升序列

【问题描述】

小蓝特别喜欢单调递增的事物。

在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。

例如,在字符串 lanqiao 中,如果取出字符 n \mathrm{n} n 和 q \mathrm{q} q,则 n q \mathrm{nq} nq 组成一个单调递增子序列。类似的单调递增子序列还有 Inq、i、ano 等等。

小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到 a o \mathrm{ao} ao,取最后两个字符也可以取到 ao。小蓝认为他们并没有本质不同。

对于一个字符串,小蓝想知道,本质不同的递增子序列有多少个?

例如,对于字符串 lanqiao,本质不同的递增子序列有 21 21 21 个。它们分别是 l、a、n、q、i、o、ln、an、lq、aq、nq、ai、lo、ao、no、io、lnq、 anq。

请问对于以下字符串(共 200 200 200 个小写英文字母,分四行显示):(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 inc.txt,内容与下面的文本相同)

复制代码
tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhf
iadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqij
gihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmad
vrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhewl

本质不同的递增子序列有多少个?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题 D:咫尺天涯

【问题描述】

皮亚诺曲线是一条平面内的曲线。

下图给出了皮亚诺曲线的 1 1 1 阶情形,它是从左下角出发,经过一个 3 × 3 3 \times 3 3×3 的方格中的每一个格子,最终到达右上角的一条曲线。

设每个格子的边长为 1 1 1 ,在上图中,有的相邻的方格(四相邻)在皮亚诺曲线中也是相邻的,在皮亚诺曲线上的距离是 1 1 1 ,有的相邻的方格在皮亚诺曲线中不相邻,距离大于 1 1 1 。

例如,正中间方格的上下两格都与它在皮亚诺曲线上相邻,距离为 1 1 1 ,左右两格都与它在皮亚诺曲线上不相邻,距离为 3 3 3 。

下图给出了皮亚诺曲线的 2 2 2 阶情形,它是经过一个 3 2 × 3 2 3^{2} \times 3^{2} 32×32 的方格中的每一个格子的一条曲线。它是将 1 1 1 阶曲线的每个方格由 1 1 1 阶曲线替换而成。

下图给出了皮亚诺曲线的 3 3 3 阶情形,它是经过一个 3 3 × 3 3 3^{3} \times 3^{3} 33×33 的方格中的每一个格子的一条曲线。它是将 2 2 2 阶曲线的每个方格由 1 1 1 阶曲线替换而成。

皮亚诺曲线总是从左下角开始出发,最终到达右上角。

小蓝对于相邻的方格在皮亚诺曲线上的相邻关系很好奇,他想知道相邻的方格在曲线上的距离之和是多少。

例如,对于 1 1 1 阶皮亚诺曲线,距离和是 24 24 24 ,有 8 8 8 对相邻的方格距离为 1 1 1 ,2 对相邻的方格距离为 3 3 3 ,2 对相邻的方格距离为 5 5 5 。

再如,对于 2 2 2 阶皮亚诺曲线,距离和是 816 816 816 。

请求出对于 12 12 12 阶皮亚诺曲线,距离和是多少。

提示:答案不超过 1 0 18 10^{18} 1018。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题 E:玩具蛇

【问题描述】

小蓝有一条玩具蛇,一共有 16 16 16 节,上面标着数字 1 1 1 至 16 16 16 。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 90 90 90 度角。

小蓝还有一个 4 × 4 4 \times 4 4×4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 A \mathrm{A} A 到 P \mathrm{P} P 共 16 16 16 个字母。

小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。

下图给出了两种方案:

请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输入格式

输入一个大写字母,表示第几个问题。

输出格式

根据所输入的问题编号,输出对应问题的答案。

说明/提示

答题模板,可供参考。

cpp 复制代码
#include<iostream>
using namespace std;
int main() {
    string ans [] = {
        "The answer of task A", // 双引号中替换为 A 题的答案
        "The answer of task B", // 双引号中替换为 B 题的答案
        "The answer of task C", // 双引号中替换为 C 题的答案
        "The answer of task D", // 双引号中替换为 D 题的答案
        "The answer of task E", // 双引号中替换为 E 题的答案
    };
    char T;
    cin >> T;
    cout << ans[T - 'A'] << endl;
    return 0;
}

试题 A :合数个数

合数是啥,合数就是,每个数都有因数。因此数就分为了三部分。

第一部分,质数

质数就是因数只有两个数的数,注意 2 2 2 也是质数。

第二部分,合数

合数就是因数两个以上的数,例如 9 9 9 就是个合数。

第三部分,既不是质数也不是合数

1 1 1 只有 1 1 1 这个因数。

所以,我们知道,我们只需一个 p d pd pd 多少个因数就行。但要特判 1 1 1 这个情况。

用一个判断函数,从 1 1 1 到 2020 2020 2020 遍历判断

cpp 复制代码
#include<iostream>
using namespace std;
bool pd(int x)
{
	if(x<2) return 1;
	else
	{
		for(int i=2;i*i<=x;i++)//注意i*i,不要写成i ,会超时的
		{
			if(x%i==0) return 1; 
		}
		return 0;
	}
}
int main()
{
   int ans=0;
    for(int i=1;i<=2020;i++)
    {
        if(pd(i)==1) ans++;
    }
    cout<<ans;
return 0;
}

最后输出 1713 1713 1713 为答案。

试题 B :含 2 天数

我们首先要知道每月天数,这个可以开个 m i m_i mi 来标记。

cpp 复制代码
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

但是,如果有一年是闰年,二月就会变为 29 29 29 天,所以我们要特判闰年情况。

cpp 复制代码
if((i%4==0&&i%100!=0)||(i%400==0))
{
    m[2]=29;
}
else
{
    m[2]=28;
}

然后,判断是否有 2 2 2 了,我们从后往前挨个判断。

cpp 复制代码
  while(x>0)
  {
    int p=x%10;
    if(p==2) return 1;
    x/=10;
    return 0;
  }

最后的代码。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ans=0;
int pd(int x)
{
	while(x)
	{
		if(x%10==2)
		{
			return 1;
		}
		x/=10;
	}
	return 0;
}
int main()
{
    for(int i=1900;i<=9999;i++)
    {
    	if((i%4==0&&i%100!=0)||(i%400==0))
		{
    		m[2]=29;
		}
		else
		{
    		m[2]=28;
		}
		for(int moon=1;moon<=12;moon++)
		{
			for(int day=1;day<=m[moon];day++)
			{
				if(pd(i)||pd(moon)||pd(day))
    			{
    				ans++;
				}
			}
		}
	}
    cout<<ans;
	return 0;
}

最后输出 1994240 1994240 1994240 为答案。

试题 C :本质上升序列

这是一道动态规划,我们要求出他给定字符串本质不同的单调递增子序列个数。求出 a 1 a_1 a1 一直到 a 200 a_{200} a200 加起来的本质不同的单调递增子序列个数。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a[201],ans;
string s="tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhewl"; 
int main()
{
    for(int i=0;i<200;i++)
    {	
    	a[i]=1;
    	for(int j=0;j<i;j++)
    	{
    		if(s[i]==s[j])
    		{
    			a[i]=0;
			}
			else if(s[j]<s[i])
			{
				a[i]+=a[j];
			}
		}
		ans+=a[i];
	}
	cout<<ans;
	return 0;
}

试题 D:咫尺天涯

求第 12 12 12 阶皮亚诺曲线中所有相邻格子在曲线上的距离之和。

我们设 f ( k ) f(k) f(k) 为 k k k 阶曲线的距离和。则 f ( k ) = 9 × f ( k − 1 ) + 水平边界距离和 + 垂直边界距离和 f(k)=9×f(k−1)+水平边界距离和+垂直边界距离和 f(k)=9×f(k−1)+水平边界距离和+垂直边界距离和。

边界距离计算使用递归函数计算每个格子在曲线上的坐标,然后对边界上的相邻点计算距离差并求和即可。

结果为: 184731576397539360 184731576397539360 184731576397539360。

试题 E:玩具蛇

运用深度优先搜索,枚举蛇的起点,从起点出发,向四个方向扩展,检查新位置是否在方格内且未被占用。输出即可。

AC代码

cpp 复制代码
#include<iostream>
using namespace std;
int main() {
    string ans [] = {
        "1713", 
        "1994240", 
        "3616159", 
        "184731576397539360", 
        "552", 
    };
    char T;
    cin >> T;
    cout << ans[T - 'A'] << endl;
    return 0;
}
相关推荐
Lucis__2 小时前
红黑树实现—规则&约束的平衡之道
数据结构·c++·算法·红黑树
yaoh.wang2 小时前
力扣(LeetCode) 70: 爬楼梯 - 解法思路
python·算法·leetcode·面试·职场和发展·动态规划·递归
逸风尊者2 小时前
开发可掌握的知识:推荐系统
java·后端·算法
Learner__Q2 小时前
每天五分钟:二分查找-LeetCode高频题解析_day4
python·算法·leetcode
智者知已应修善业2 小时前
【字符串提取3个整数求和】2024-2-11
c语言·c++·经验分享·笔记·算法
唯唯qwe-2 小时前
Day21:贪心算法 | 加油站,分发糖果
算法·贪心算法
点云侠2 小时前
粒子群优化算法求解三维变换矩阵的数学推导
线性代数·算法·矩阵
dragoooon343 小时前
[hot100 NO.31~36]
数据结构·算法·排序算法
白兰地空瓶3 小时前
JavaScript 列表转树(List to Tree)详解:前端面试中如何从递归 O(n²) 优化到一次遍历 O(n)
javascript·算法·面试