C++真题实战(一)[卡片问题]
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,但是拼 11 时卡片 1 已经只有一张了,不够拼出 11 。现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
使用方法:枚举
代码实现:
#include <iostream>
#include <stdbool.h>
using namespace std;
int arr[10] = { 0 };
bool check(int x)
{
while (x)
{
int b = x % 10;
if (b == 1)
{
if (arr[1] == 0)
return false;
arr[1]--;
}
x = x / 10;
}
return true;
}
int main()
{
for (int i = 0; i <= 9; i++)
{
arr[i] = 2021;
}
for (int i = 0;; i++)
{
if (!check(i))
{
return cout << i - 1 << endl, 0;
}
}
return 0;
}