小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1
拼到多少?
提示:建议使用计算机编程解决问题。
/*暴力枚举&&万能的结构体*/
#include
#include
using namespace std;
const long long int N=10000;
typedef struct Card{
int num;
int cnt;
};
int main(){
Card number[10];
for(int i=0;i<10;i++){
number[i].num=i;
number[i].cnt=2021;
}
for(long long int i=0;i<=N;i++){
string s;int n=i;
while(n>0){ //将i转化为字符i
s+=(char)((n%10)+48);
n/=10;
}if(i==0){ //0特判
s=(char)48;
}
for(int j=0;j<s.size();j++){
int isnum=(int)(s[j]-48); //取出i的每个位置的数
if(number[isnum].cnt>0){ //从2021张减去
number[isnum].cnt--;
}else{
cout<<i; //2021张都用完,测不能拼出i;
return 0;
}
}
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)