本题目为2021年蓝桥杯b组第二题
以下为本人的代码与注释
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[10];//用来记录不同卡片数量的多少
int res = 0;//用来记录结果
int st = 0;//用来作为结束标记的变量
int find(int i) {//该函数是用来查找该卡片是否还有
if (a[i] <= 0)
return 1;
else {
return 0;
}
}
//该函数用来删除所需要的卡片,里面涉及了多进制转换为实数,用整除与求余即可拆分
//并运用了递归的思想
int fuck(int i) {
if (i < 10) {
if (find(i) == 0) {
a[i]--;
} else {
st++;
}
} else {
if (find(i % 10) == 0) {
a[i % 10]--;
} else {
st++;
}
fuck(i / 10);
}
}
int main() {
for (int i = 0; i < 10; i++) {//传入不同卡片初始值
a[i] = 2021;
}
for (int i = 1; i <= 20210; i++) {//递增去查找是否凑的出来?st不是0的时候说明卡片不够了就停止
fuck(i);
if (st != 0)
break;
res++;
}
printf("%d", res);
}