#include <bits/stdc++.h>
using namespace std;
int a[10],b[10];
int cnt,cnt1,cnt2,p,i;
int main()
{
for(i=0;i<=9;i++)
{
a[i]=2021;
}
for(i=1;i<99999;i++)
{
for(p=1;p<10;p++)
{
if(i<pow(10,p))
{
break;
}
}//确定数字位数
int temp=i;
cnt=0;
while(temp>0)
{
b[p-cnt-1]=temp%10;
temp=temp/10;
cnt++;
}//把一个数字拆分到数组里
for(int j=0;j<cnt;j++)
{
if(b[j]==0) a[0]--;
if(b[j]==1) a[1]--;
if(b[j]==2) a[2]--;
if(b[j]==3) a[3]--;
if(b[j]==4) a[4]--;
if(b[j]==5) a[5]--;
if(b[j]==6) a[6]--;
if(b[j]==7) a[7]--;
if(b[j]==8) a[8]--;
if(b[j]==9) a[9]--;
}//某个数字出现一次,减少一张卡片
for(int j=0;j<=9;j++)
{
if(a[j]==0)
{
cnt1++;//卡片恰好用光,这个数能组成
}
if(a[j]<0)
{
cnt2++;//卡片超出,这个数组不成
break;
}
}
if(cnt1!=0||cnt2!=0)
{
break;
}
}
if(cnt2!=0)
{
cout<<i-1;
}
else
{
cout<<i;
}
return 0;
}
把一个数分拆存到数组中: