解题思路
我这个比较好理解,不过是根据题解视频的思路来的
从1开始(因为题说了要正整数)枚举每个整数i,看剩下的数字卡片能否拼出i,在拼i时,i每一位上的数字对应的剩余数量要减1。于是我先得出该位上的数,再判断该数是否有剩余,有剩余则继续判断该位的前一位上的数是否有剩余,这样一来我不需要知道谁先用完,也不需要知道谁先用完后还能不能拼成其它数,直接是当我拼不成时i--,并退出即可。
而goto就很好,它使我的程序能直接跳转到我想要的位置,便不会出现break后还要跳出外一个for循环而break无法精确做到在跳出内循环后再跳出外循环,即break无法连续跳出两层循环的尴尬处境。
#include<stdio.h>
int main()
{
int a[10]={2021,2021,2021,2021,2021,2021,2021,2021,2021,2021};
int i,t,q;
for(i=1;;i++)
{
for(t=i;t!=0;)
{q=t%10;
if(a[q]<=0)
{
i--;
goto end;
}
a[q]--;
t=t/10;
}
}
end:printf("%d",i);
return 0;
}
通过,截个图~