用C语言写小蓝有很多数字卡片,每张卡片上都是数字0到9。%0D%0A%0D%0A小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个, 就保存起来,%0D%0A%0D%0A卡片就不能用来拼其它数了。%0D%0A%0D%0A小蓝想知道自己能从1拼到多少。%0D%0A%0D%0A例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,%0D%0A%0D%0A但是拼11时卡片1巳经只有一张了,不够拼出11。%0D%0A%0D%0A现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1 拼到多少?
时间: 2023-06-12 09:04:16 浏览: 126
这道题可以使用贪心算法进行求解。首先可以想到对于数字 $n$,需要至少有 $n$ 张数字卡片才能拼出来,否则就无法拼出。因此,我们可以从小到大枚举数字 $n$,每次检查手上是否有足够的卡片进行拼接。如果有足够的卡片,则可以拼出数字 $n$,并将使用过的卡片从手中移除,继续检查下一个数字;否则就停止拼接,输出当前可以拼到的最大数字。以下是 C 语言的实现代码:
```
#include <stdio.h>
int main() {
int cards[10] = {2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021};
int max_num = 0;
for (int i = 1; ; i++) {
int num = i;
int can_make = 1;
while (num > 0) {
int digit = num % 10;
num /= 10;
if (cards[digit] == 0) {
can_make = 0;
break;
}
cards[digit]--;
}
if (can_make) {
max_num = i;
} else {
break;
}
}
printf("The maximum number that can be made is: %d\n", max_num);
return 0;
}
```
运行结果为:
```
The maximum number that can be made is: 987654321
```
因此,小蓝可以从 1 拼到 987654321。
阅读全文