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

news2024/11/23 15:43:19

在这里插入图片描述

  • 👑专栏内容:蓝桥杯刷题
  • ⛪个人主页:子夜的星的主页
  • 💕座右铭:前路未远,步履不停

目录

  • 一、题目背景
  • 二、题目描述
  • 三、题目分析
    • 1.检查思路
    • 2.思路优化
  • 四、代码汇总
    • 1.C语言代码
    • 2. C++代码
    • 3.运行结果
  • 五、总结
    • 1.枚举思想
    • 2.取余求位数


一、题目背景

本题为2021年省赛填空题

  • C/C++A组第1题
  • C/C++B组第2题
  • Java B组第2题
  • Java B组第3题
  • Python组第1题

二、题目描述

小蓝有很多数字卡片,每张卡片上都是数字 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再进行取余即可获得。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“强鹰”会议纪要发布,不会停止加息?风险资产恐将承压

美联储发布了去年12月的会议纪要&#xff0c;详细揭露了货币政策制定者对经济和加息路径的最新研判&#xff0c;继续展现偏鹰的论调和立场。 纪要显示&#xff0c;美联储官员致力于抗击通货膨胀&#xff0c;并预计在取得更多进展之前利率将继续上升&#xff0c;并维持“一段时间…

82.Zabbix之Linux服务器agent监控(不需要联网)

Zabbix版本:6.2.3 官网上下载对应的agent

C#中的多线程(一)

一、多线程的术语 在学习多线程之前需要先理解有关多线程的术语。 CPU&#xff08;中央处理器&#xff09;或内核/核心是实际执行程序的硬件单元。许多现代CPU都支持同时多线程&#xff08;Intel称之为超线程&#xff09;&#xff0c;即使一个CPU能表现为多个「虚拟」CPU。进…

Linux安装xFormers教程

参考文章&#xff1a;手把手教你在linux中手动编译并安装xformers 作者&#xff1a;青空朝颜モ出处&#xff1a;bilibili 官方安装方法 官方仓库传送门&#xff1a;https://github.com/facebookresearch/xformers.git 官方给了两种方式安装xFormers&#xff0c;这里给出官方仓…

数字化转型之数字化和业务化论证

引言 数据业务化的本质是数据的产品化、商业化与价值化。主要强调产品化、新业务和专业化运作,也就是以数据为主要内容和生产原料,打造数据产品,按照产品定义、研发、定价、包装和推广的套路进行商业化运作,把数据产品打造成能为企业创收的新兴业务。 数字化是信息技术发…

NodeJs中使用Express开发web项目

文章目录1. web开发模式1.1 服务端渲染的Web开发模式1.2 前后端分离的Web开发模式1.3 如何选择web开发模式2. 身份认证2.1 Session认证机制2.1.1 cookie2.1.2 cookie认证2.1.3 在Express中使用Session认证2.1.4 Session认证的局限性2.2 JWT认证机制2.2.1 JWT组成部分2.2.2 在No…

mysql优化实战

空气质量小时索引顺序先站点后时间 索引情况 根据时间范围查询索引失效 EXPLAIN SELECT station_code, station_name, data_time, aqi, pm25, pm10, o3, no2, so2, co, primary_pollutant, create_date FROM wuhaiyizhangtu.t_air_pollution where data_time between 2022-1…

Node.js 中 session验证登录

在前一篇内容中讲到这个cookie实现验证登录&#xff0c;cookie是存储在客户端的&#xff0c;而session是存储在服务器的&#xff0c;相比较session的安全性会更高&#xff0c;session对象存储特定用户会话所需要的属性以及配置信息&#xff0c;服务通过session对象将用户的信息…

【力扣刷题】day3-4. 寻找两个正序数组的中位数

力扣刷题笔记day3 4. 寻找两个正序数组的中位数 题意 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 输入&#xff1a;nums1 [1,3], nums2 …

【通讯录管理系统】C++全栈体系(六)

通讯录管理系统 第一章 系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统 系统中需要实现的功能如下&#xff1a; 添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、…

人工智能算法模型--Alpha-Beta剪枝算法学习笔记

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &a…

【华为机试真题详解】不含 101 的数【2022 Q4 | 100分】

文章目录前言题目描述输入描述输出描述示例 1示例2题目解析参考代码前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试&#xff0c;期间有想了解的可以私信我&#xff0c;我会尽可能帮您解答&#xff0c;也可…

逻辑漏洞渗透与攻防(五)之权限类逻辑漏洞

目录 权限类逻辑漏洞 平行权限跨越 基于用户身份ID 基于对象ID 基于文件名 垂直权限跨越 未经授权访问 权限类逻辑漏洞 越权漏洞又分为平行越权&#xff0c;垂直越权和交叉越权。 平行越权&#xff1a;权限类型不变&#xff0c;权限ID改变&#xff0c;垂直越权&#xff1…

SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序&#xff0c;您可以使用 DESC 关键字。 SQL ORDER BY 语法 SELECT c…

太适合小白了!11招,高手都在用的数据分析招式!

阅读本文大概需要3分钟菜鸟独白用Python来玩转数据分析实在是太爽了&#xff0c;因为有强大的Pandas来处理数据非常方便&#xff0c;我个人对数据分析情有独钟&#xff0c;探索数据的秘密非常好玩&#xff01;前段时间写过一篇小白学数据分析入门招式&#xff0c;但是进阶的部分…

蓝桥杯基础练习合集九 1.回文词2.猜数字游戏的提示3.生成元4.环状序列5.刽子手游戏

目录 1.回文词 2.猜数字游戏的提示 3.生成元 4.环状序列 5.刽子手游戏 1.回文词 问题描述 输入一个字符串&#xff0c;判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串&#xff0c;就是反转以后和原串相同&#xff0c;如abba和madam。所有镜像串&…

docker 安装mysql5.7

拉取镜像 非常快 因为上一篇安装的是阿里云的centos7并且配置了阿里云的镜像加速 docker pull mysql:5.7 拉取成功检验 启动镜像 docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASS…

软件测试行业未来职业规划是什么

随着软件工程活动的不断演化&#xff0c;软件测试岗位已经成为了软件开发中极其重要的一个环节&#xff0c;因而市场对于软件测试人才的需求也在日益扩大。相信不少想入行软件测试的小伙伴都难免会有这样的疑问&#xff0c;软件测试行业究竟怎么样&#xff1f;职业发展应该如何…

代码层面解决 The channelMax limit is reached. Try later.

该问题也是非常的严重&#xff0c;没有合适处理即导致消息丢失&#xff1b; 解决方案 设置连接工厂配置 CachingConnectionFactory connectionFactory new CachingConnectionFactory();connectionFactory.setChannelCheckoutTimeout(30000);解析 该报错根本原因是**”连接池…

2023年1月伊凡梳理如何快速安装git并且配置本地gitee账号权限方便拉代码

本文优雅草伊凡投稿一颗优雅草科技&#xff0c;欢迎其他朋友们来投稿&#xff08;一定会详细署名&#xff09;还是那个原因因为重装了因此git信息已经没有了&#xff0c;还是那个原因因为网上各类文章鱼龙混杂有好的有坏的&#xff0c;真正可用的其实还是不好找的&#xff0c;自…