小蓝有很多数字卡片,每张卡片上标有 0到9 中的一个数字。
他想用这些卡片从 1 开始拼出连续的正整数,每拼一个数,就把用到的卡片保存起来,之后不能再用这些卡片拼其他数。
例如,如果小蓝手里有 30 张卡片,每个数字 0到9 各 3 张,他可以拼出 1到10,但是拼 11 时,数字 1 的卡片已经不够用了。
现在,小蓝手里有每个数字 0到9 的卡片各 2021 张(总共 20210 张),问他能够从 1 拼到的最大连续整数是多少?
这道题的思路也很简单,咱们准备一个十个空间大小的数组vec[10],都存储2021,代表0~9的卡片都有2021张,遍历从1开始的数,我们将它逐位分解,对于分解出的每一位x,vec[x]–,直到某个数分解出的某位i,vec[i]=0时,说明没有卡片去给它组成这个数了,那么答案就是这个数的上一个数。

#include<iostream>
#include<vector>
using namespace std;
vector<int> vec(10,2021);
int work()
{
for(int i=1;;i++)
{
int re=i;
while(re)
{
int index=re%10;
if(vec[index]==0)
return i-1;
vec[index]--;
re/=10;
}
}
}
int main()
{
cout<<work();
}