先分析一下问题,先创建一个数组用来存放0~9,放在全局变量默认为0,然后从0枚举到9将数组置为2021,意为2021张卡片。然后再写个函数判断卡片的条件得解。话不多说,上代码。
#include<iostream>
using namespace std;
int s[10]; //全局变量默认为0
bool check(int x)
{
while(x) //当x不为0时
{
int t= x%10; //取出个位数
x/=10; // 再将个位数删掉
if(--s[t]<0) //如果这个数不够用
{
return false;
}
}
return true;
}
int main()
{
for(int i=0;i<10;i++)
{
s[i]=2021; //卡片共有2021张
}
for(int i=0;;i++)
{
if(!check(i)) //如果卡片不能拼凑起来即不符合题意
{
cout<<i-1<<endl; //参考题目中的11
break;
}
}
return 0;
}
最后跑出的结果为3181,问题得到解决。