C/C++蓝桥杯之卡片问题

问题描述:小兰有很多数字卡片,每张卡片上都是数字0~9。

小兰,准备用这些卡片拼一些数。她想从1开始拼出正整数,每拼一个就保存起来,卡片就不能再用来拼其他数了。

小兰想知道自己能从1拼到多少。

例如,若小兰有30张卡片,其中0~9张各3张,则小兰可以拼出1~10,但是在拼11时,卡片1已经有一张了,因此不能拼出11。

现在小兰手里有0~9的卡片各2021张,共20210张卡片,请问小兰可以从1拼到多少?

分析:求解本题应首先定义一个长度为10的数组,用来存放数字0~9的卡片数,下标代表数字,元素代表卡片已经使用的张数,初始值为0,每种类型的卡片如果使用超过2021张,则输出结果。

程序从1开始递增遍历,当遍历到某个数时,将拼成该数所需的所有卡片类型数增加,随后判断数组中每种卡片是否被用完,如果用完则退出循环。

C语言程序:

#define _CRT_SECURE_NO_WARNINGS 1


#include<stdio.h>
int main()
{
	int a[10] = {0,0,0,0,0,0,0,0,0,0};
	for (int s=1;; s++)
	{
		int temp = s;
		while (temp)
		{
			a[temp % 10]++;
			temp /= 10;
		}
		for (int i = 0; i < 10; i++)
		{
			if (a[i] > 2021)
			{
				printf("%d", s-1 );
				return 0;
			}
		}
	}
}

C++程序:

#include<iostream>
using namespace std;
int a[10];
int main()
{
	for(int s=1;;s++)
	{
		int temp=s;
		while(temp)
		{
			a[temp%10]++;
			temp/=10;
		}
		for(int i=0;i<10;i++)
		{
			if(a[i]>2021)
			{
				cout<<s-1<<endl;//减1是因为这一张无法凑出
				return 0;
			}
		}
	}
}

此题难度不算太高,自己手动调试一下完全能够弄懂!

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清潇沈默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值