小蓝有很多数字卡片,每张卡片上都是数字 0到 9。
小蓝准备用这些卡片来拼一些数,他想从 1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
但是拼 1111 时卡片 11 已经只有一张了,不够拼出 11。
现在小蓝手里有 00 到 99 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
此题较简单,采用枚举思想
但一定要审清题,最开始我居然天真的想前面排小数,后面排大数(😂😂😂😂😂,转念一想天这个数不是特别大吗)其实这张卡片用过一遍就不能再用了,
思路:直接从1开始枚举,数的每一位用一张牌,直到某一种类型的牌没有了,该数减一就是其最大数。
#include<bits/stdc++.h>
using namespace std;
int num[10];
int main()
{
for(int i=0;i<10;i++)//输入卡片张数
{
num[i]=2021;
}
int ans=1;
while(1)
{
int pos=ans;
while(pos)//调取每一位
{
int x=pos%10;
if( num[x]>0)num[x]--;
else break;
pos/=10;
}
if(pos>0)break;
ans++;
}
cout<<ans-1;
}
虽然这题目很简单,很低级,枚举不过是要做到不重不漏,但我还是做了很久。
但没关系,万丈高楼平地起,我会继续努力!
新手小白,翻车勿怪。
创作不易,点赞鼓励下呗