题目如上
思路:枚举法;从 1 开始枚举, 每次检查剩下的卡片能不能拼出这个数字就好。
问题:怎么把一个数在 10 进制下每个位置的数字求出来呢?
很简单对吧,先 对 10 取模,个位上的数字就求出来了,再除以 10 ,原本十位上的数字就变到了个位上,再对 10 取模...依次进行下去就求出来了。
把当前拼的这个数每一位都拆出来,看看那个数字的卡片还够不够,不够的话就说明拼不了,这时候退出循环,所以最多拼到上一个数。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
bool check(int x){
while(x){
int now=x%10;
if(num[now]>0)
num[now]--;
else
return false;
x/=10;
}
}
int main(){
for(int i=0;i<10;i++)num[i]=2021;
for(int i=1;;i++){
if(!check(i)){
cout<<i-1<<endl;
break;
}
}
return 0;
}