第一题.
1.问题:小蓝数字卡片题
小蓝有很多数字卡片,每张卡片上都是数字0到9。 小蓝准备用这些卡片来拼一些数,他想从1开始拼现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?
2.解题过程:
(1).转化字符串法:
//法一
struct num { char a; int b; };
struct num x[10];//结构体数组用于存放数字和其卡片数量
int main()
{
char m[10] = { '0' };
int arr[10] = { 0 };
int a, b, c, d;
for (a = 0; a < 10; a++)//存放0`9
{
x[a].a = '0' + a;
}
for (a = 0; a < 10; a++)//存放卡牌数
{
x[a].b = 2021;
}
for (a = 1;; a++)
{
sprintf(m, "%d", a);//数字转化字符
b = strlen(m);
for (c = 0; c < b; c++)
{
for (d = 0; d < 10; d++)
{
if (x[d].b == 0)判断是否有一个数字卡牌用完,然后输出结束所有循环
{
goto h;
}
else
{
if (m[c] == x[d].a)//进行相应卡牌的减少
{
x[d].b--; break;
}
}
}
}
}h:printf("%d", a - 1);
return 0;
}
(2).直接(暴力求解)法
//法二
int arr[10];
void judge(int a)//进行卡片数量的加减
{
switch (a)
{
case 0:arr[0]--;
break;
c