PAT 1023組の個の最小数は0-9の各いくつかの個を与える.これらの数字を任意の順序で並べることができますが、すべて使用する必要があります.目標は、最後に得られた数をできるだけ小さくすることである.例えば、0 2つ、1つ、3つ、5つ、8を2つ与えて得られた数字は10015558である.


1023組の最小数(20点)
0~9の数字をいくつかずつ指定します.これらの数字を任意の順序で並べることができますが、すべて使用する必要があります.目標は最後に得られた数をできるだけ小さくすること(注意0はトップにならない).たとえば、2つの0、2つの1、3つの5、1つの8が与えられ、私たちが得た最小数は10015558です.
与えられた数字は、プログラムを作成して構成できる最小の数を出力してください.(タイトルソースPAT、侵入削除)
入力形式:入力は1行に10個の非負の整数を与え、順序は私たちが数字0、数字1、......数字9の個数を持っていることを示す.整数間はスペースで区切られます.10個の数字の合計数は50を超えず、少なくとも1個の0以外の数字を有する.≪出力フォーマット|Output Format|emdw≫:1行に構成できる最小数を出力します.
入力サンプル:2 2 0 0 0 3 0 1 0出力サンプル:10015558
-----------------------------------------------------------------------------------------------------------------------------------------------
構想
表示
0~9の数字ごとの個数を1つの配列で表す
int flag[10]={0};
まず0を除いて最小の1つの数字を出力して、一回だけ出力して、それから0を出力して、それから数字を小さいから大きいまで出力します
解決策は下記↓
1.0以外の最小値を出力し、1回のみ出力する
for(i=1;i<10;i++)
    {
     
        if(flag[i]!=0)
           {
     
                printf("%d",i);
                flag[i]--;   // 1,      0    1 i;
                break;   //         
           }
    }

-------------------------------------------------------------------------------------------------------------------------
コード#コード#
#include
int main()
{
     
    int flag[10]={
     0};
    int i,j;
    for(i=0;i<10;i++)
        scanf("%d",&flag[i]);
    for(i=1;i<10;i++)
    {
     
        if(flag[i]!=0)
           {
     
                printf("%d",i);
                flag[i]--;
                break;
           }
    }
    for(i=0;i<10;i++)
    {
     
        for(j=0;j<flag[i];j++)
        {
     
            printf("%d",i);
        }
    }
    printf("
"
); return 0; }