头歌资源库(10)拼数字

55 阅读1分钟

一、 问题描述

二、算法思想 

  1. 初始化一个长度为10的数组count,用于记录卡片中每个数字的数量。
  2. 从1开始依次尝试拼出正整数,直到无法拼出下一个数为止。
  3. 对于每个尝试拼出的正整数,遍历其每一位的数字,检查该数字在count中是否还有剩余。如果有剩余,则将该数字的数量减1,并继续拼接下一位数字。
  4. 如果所有位数都成功拼接完毕,则说明可以拼出该正整数,将其保存起来,并继续尝试拼接下一个数。
  5. 当无法拼出下一个数时,返回保存的最大正整数。

三、代码实现 

#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);
}

执行结果 

结语    

兴趣是最好的老师

毅力是远大的前程

!!!