• PAT (Basic Level) Practice (中文)1023 组个最小数


    1023 组个最小数

    给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。

    现给定数字,请编写程序输出能够组成的最小的数。

    输入格式:

    输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。

    输出格式:

    在一行中输出能够组成的最小的数。

    输入样例:

    2 2 0 0 0 3 0 0 1 0

    输出样例:

    10015558

    分析: 首先列出0~9所有数字,如 输入 2 2 0 0 0 3 0 0 1 0 时,应列出 0 0 1 1 5 5 5 8 ,对列出的数字从小到大排序,从左到右,找出第一个不为0的数,作为最小数的首位,将剩下的数依次输出。

    代码:

     1 #include<stdio.h>
     2 
     3 void fun(int *arr2,int t)
     4 {
     5     int i,j;
     6     int index=0;
     7     int temp;
     8     for(i=0;i<t-1;i++)
     9     {
    10         index=i;
    11         temp=arr2[i];
    12         for(j=i+1;j<t;j++)
    13         {
    14             if(arr2[j]<=arr2[index]) index=j;
    15         }
    16         arr2[i]=arr2[index];
    17         arr2[index]=temp;
    18     }
    19 }
    20 
    21 void printfun(int *arr2,int n)
    22 {
    23     int min=0;
    24     int i;
    25     for(i=0;i<n;i++)
    26     {
    27         if(arr2[i]!=0)
    28         {
    29           //  min=arr2[i];
    30           printf("%d",arr2[i]);
    31           arr2[i]=-1;
    32             break;
    33         }
    34     }
    35     for(i=0;i<n;i++)
    36     {
    37         if(arr2[i]>=0&&arr2[i]<=9)
    38         {
    39            // min=min*10+arr2[i];
    40            printf("%d",arr2[i]);
    41         }
    42     }
    43    // printf("%d
    ",min);
    44    printf("
    ");
    45 }
    46 int main()
    47 {
    48     int arr1[10];
    49     int arr2[1000];
    50     int t=0;
    51     int i;
    52     int sum=0;
    53     int l=0;
    54     for(i=0;i<10;i++)
    55     {
    56         scanf("%d",&arr1[i]);
    57         sum+=arr1[i];
    58     }
    59     if(sum>50&&(sum-arr1[0]<=0))return 0;
    60     else{
    61     int j;
    62     for(i=0;i<10;i++)
    63     {
    64         for(j=1;j<=arr1[i];j++)
    65         {
    66             arr2[t++]=i;
    67         }
    68     }
    69     fun(&arr2,t);  //排序
    70     printfun(&arr2,t); //组最小数
    71     return 0;
    72     }
    73 
    74 
    75 }

     

  • 相关阅读:
    数据库连接单例模式
    魔术方法
    序列化与反序列化
    设计模式
    类的自动加载
    错误处理
    匿名类--php7.0以上
    OpenCV中HSV颜色模型及颜色分量范围
    Opencv 轮廓提取
    opencv 二值化_OpenCV二值图像案例分析精选 | 第二期
  • 原文地址:https://www.cnblogs.com/cafuc20160512056/p/10334499.html
Copyright © 2020-2023  润新知