一、 问题描述
二、算法思想
初始化一个长度为10的数组count,用于记录卡片中每个数字的数量。
从1开始依次尝试拼出正整数,直到无法拼出下一个数为止。
对于每个尝试拼出的正整数,遍历其每一位的数字,检查该数字在count中是否还有剩余。如果有剩余,则将该数字的数量减1,并继续拼接下一位数字。
如果所有位数都成功拼接完毕,则说明可以拼出该正整数,将其保存起来,并继续尝试拼接下一个数。
当无法拼出下一个数时,返回保存的最大正整数。
三、代码实现
#include<stdio.h>
int main()
{
int a[10],i,m,n,t;
for(i=0;i<10;i++)
{
a[i]=2021;
}
for(m=1;;m++)
{
t=m;
while(t!=0)
{
n=t%10;
t=t/10;
switch(n)
{
case 1:a[1]--;break;
case 2:a[2]--;break;
case 3:a[3]--;break;
case 4:a[4]--;break;
case 5:a[5]--;break;
case 6:a[6]--;break;
case 7:a[7]--;break;
case 8:a[8]--;break;
case 9:a[9]--;break;
case 0:a[0]--;break;
}
if(a[n]==0)
break;
}
if(a[n]==0)
break;
}
printf("%d\n",m);
}
执行结果
结语
兴趣是最好的老师
毅力是远大的前程
!!!