首页 > 其他分享 >【蓝桥杯基础题】2021年省赛填空题—卡片

【蓝桥杯基础题】2021年省赛填空题—卡片

时间:2023-02-11 21:34:28浏览次数:45  
标签:10 return 卡片 int 填空题 蓝桥 num 2021 card


一、题目背景

本题为2021年省赛填空题

  • C/C++B组第2题
  • Java B组第2题
  • Java B组第3题

二、题目描述

小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从 1 拼到多少。例如,当小蓝有 30 张卡片,其中 0到9各3 张,则小蓝可以拼出 1到 10。但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。

现在小蓝手里有 0到9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1拼到多少? 提示:建议使用计算机编程解决问题。

三、题目分析

本题是一道非常典型的基础枚举题。想求出最多拼到多少,那就从1开始一直往后枚举,枚举的过程中检查这个数是不是符合条件,如果符合卡片条件就继续枚举,直到不符合条件为止(卡片不够了)。 所以这道题的核心就转到了 如何检查 上。

1.检查思路

我们可以申请一个下标分别从0到9的数组,对应卡片从0~9,让每一个数组的值都为卡牌的总数量大小:2021。 然后通过取余的方式,将每一位对应的数字求出来,然后看看这些对应位置的数的数量是不是符合卡牌的数量。

取余求每个位置的数 : 例如: 求189的每一位数的大小 个位: 189%10 = 9 十位:(189/10)%10 = 8 百位:(189/10/10)%10 = 1

下面我用C语言写一下这段起检查作用的函数

#include<stdio.h>
int card[10]; 				// (1)
int check(int num)			// (2)
{
	while (num)
	{
		int a = num % 10;	//(3)
		if (card[a] > 0)	//(4)
			card[a]--;		//(5)
		else				
			return 0;		//(6)
		num = num / 10;		//(7)
	}
	return 1;				
}
  • (1)申请下标分别从0到9的数组,用来存卡片
  • (2)num表示需要检查的数
  • (3)求每一位的数是多少
  • (4)判断这个数对应的卡牌还有没有
  • (5)如果有,就符合要求,但是用过了这张卡牌所以减一
  • (6)如果没有,就不符合要求
  • (7)改变位数(将百位变为十位,十位变为个位......)

2.思路优化

上面的思路,其实已经能够完成检查的任务,但是如果仔细想想,其实枚举是从1开始,那么消耗卡片1的数量是最多的。卡片1的数量是最先小于0,所以我们只需要检查卡片1的数量就可以了。

下面我用C语言写一下优化后的函数

#include<stdio.h>
int card[10];  
int check(int num)
{
	while (num)
	{
		int a = num % 10;		//(1)
		if (a == 1)				//(2)
			if (card[1] == 0)	//(3)
				return 0;
			else
				card[1]--;		//(4)
		num = num / 10;			//(5)
	}
	return 1;
}
  • (1)求每一位的数是多少
  • (2)如果这一位是1
  • (3)如果卡牌1的数量等于0,结束检查
  • (4)如果不为0,卡牌1的数量减一
  • (5)改变位数(将百位变为十位,十位变为个位......)

四、代码汇总

1.C语言代码

C语言里面没有bool类型,但是C语言中0代表假,非0代表真。

#include<stdio.h>
int card[10];  
int check(int num)
{
	while (num)
	{
		int a = num % 10;
		if (a == 1)
			if (card[1] == 0)
				return 0;
			else
				card[1]--;
		num = num / 10;
	}
	return 1;
}
int main()
{
	for (int i = 0; i <= 9; i++)
		card[i] = 2021;   			//(1)
	for (int i = 1;check(i); i++) 	//(2)
	{
		printf("%d\n", i ); 		//(3)
	}
	return 0;
}

(1)循环,让每个卡牌的数量都为2021个 (2)逐个枚举检查 (3)输出符合的正确的结果

2. C++代码

C++ 代码和C语言代码大致差不多,不同的是C++里面有bool类型

当然printf也可也用c++里面的cout代替

cout不需要记太多的占位符,更加方便。

#include<iostream>
using namespace std;
int card[10];  
bool check(int num)
{
	while (num)
	{
		int a = num % 10;
		if (a == 1)
			if (card[1] == 0)
				return false;
			else
				card[1]--;
		num = num / 10;
	}
	return true;
}
int main()
{
	for (int i = 0; i <= 9; i++)
	{
		card[i] = 2021;
	}
	for (int i = 1;check(i); i++)
	{
		cout << i << endl;
	}
	return 0;
}

3.运行结果

以下为代码的运行结果。

在这里插入图片描述

故最终答案为:3181

五、总结

1.枚举思想

枚举就是是从问题所有可能的解的集合中一一枚举出各种元素。

并且用题目中给定的检验条件判定哪些元素是错误的,哪些是正确的。

2.取余求位数

取余求各个位数是常用的基本功。 不管是几位数个位数都可以直接使用 数 % 10 来取余数获得 至于获取十位数,百位数,只需要处于10或100再进行取余即可获得。

标签:10,return,卡片,int,填空题,蓝桥,num,2021,card
From: https://blog.51cto.com/zxhy/6050973

相关文章

  • 「解题报告」[省选联考 2021 A 卷] 矩阵游戏
    啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会了!啥都不会......
  • 220211 如何通过阅读提升英语?
    你关于英语的学习,已经持续了一段,但是,对于如何通过阅读,提升你的英语理解水平,还是停留在初级阶段.通过栗之的文章,你初步把握到了一点细节,需要持续的锻炼与强化.其实......
  • 题解:[PA2021] Drzewo czerwono-czarne
    题目链接:[PA2021]Drzewoczerwono-czarne首先对于起始和终止相同以及起始中只有一种颜色并且终止和起始不相同这两种情况是平凡的。考虑最后一步,一定是将某一条边上的一......
  • 【蓝桥杯基础题】2020年省赛填空题—回文日期
    一、题目背景本题为2020年省赛填空题C/C++A组第7题C/C++B组第7题JavaA组第7题二、题目描述1.问题描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020......
  • 2021年最新版 Elasticsearch 面试题总结(30 道题含答案)
    2021年最新版Elasticsearch面试题总结(30道题含答案)全部面试题答案,更新日期:12月30日,直接下载吧!下载链接:高清500+份面试题资料及电子书,累计10000+页大厂面试题PDFE......
  • 最新面试题2021年常见Docker面试题及答案汇总
    最新面试题2021年常见Docker面试题及答案汇总全部面试题答案,更新日期:01月30日,直接下载吧!下载链接:高清500+份面试题资料及电子书,累计10000+页大厂面试题PDFDocker题......
  • 最新面试题2021年Elasticsearch面试题及答案汇总
    最新面试题2021年Elasticsearch面试题及答案汇总全部面试题答案,更新日期:01月30日,直接下载吧!下载链接:高清500+份面试题资料及电子书,累计10000+页大厂面试题PDFElasti......
  • iOS AppStore上架流程图文详解2021版 (上)
    到了2021年,虽然网上也有大牛写过很多IOSApp上架流程资料,但随着苹果发布机制的微调有些已经过时了。我就趁着这次刚刚发布成功的鲜活经验,记录下来,做一下补充。1、首先得......
  • [THUPC2021 初赛] 切切糕
    个人思路:从小往大切,感性理解一下。由于每个人都足够聪明,博弈dp只有后效型而没有前效性,所以从固定的最终状态倒序往前dp,得到初始状态的答案。状态:\(dp_{i,j}\)表示还......
  • 【蓝桥杯基础题】2017年省赛—九宫幻方
    一、题目背景本题为2020年省赛程序设计题C/C++C组第8题二、题目描述1.问题描述小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方......