试题B:卡片
【问题描述】 小蓝有很多数字卡片,每张卡片上都是数字0到9。
小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从1拼到多少。
例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,但是拼11时卡片1已经只有一张了,不够拼出11。
现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少? 提示:建议使用计算机编程解决问题。
【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
int cnt[10] = { 0 };
int main()
{
int ans = 0;
int k = 1;
int x;
for (int i = 0; i < 10; i++)
cnt[i] = 3;
while (1)
{
x = k++;//x先等于k,然后k自加
while (x)//用一个循环判断一个门牌号用的数
{
if (cnt[x % 10] == 0)
goto out;
else
cnt[x % 10]--;
x /= 10;
}
ans++;
}
out:
printf("%d", ans);
return 0;
}
心得:用goto语句可以解决break语句难以跳出循环的问题。