第45回質問を「安全プランを証明」:最小の数は、アレイ状に配置され

// 顔質問45:アレイの最小数は配置
 // タイトル:正の整数配列を入力し、すべての数字の配列は、プリント枚数が戦うことができ一緒にステッチに配置
 // 最小限にデジタルインターフェースのすべてを。3入力配列{例えば、32、321}が、この数3印刷
 // 321323に配置することができる単語の最小数。

#include " cstdioを" 
の#include < 文字列 > 
の#include <アルゴリズム> の#pragma(無効:4996)警告// VS少ない無視安全上の警告int型の比較(のconst 無効 * strNumber1、constの無効 * strNumber2); // int型ほとんどの10で10進数の整数で型のconst int型 g_MaxNumberLength = 10 ; CHAR



  


 

G_StrCombine1 = * 新しい新しい CHAR [g_MaxNumberLength * 2 + 1 ];
 CHAR * = g_StrCombine2 新しい新しい CHAR [g_MaxNumberLength * 2 + 1 ]; 

ボイド PrintMinNumber(CONST  INT *数字、int型の長さ)
{ 
    IF(番号== nullptr長|| <= 0 リターン; 

    // 文字列にアレイ、二次元アレイ注** 
    チャー ** strNumber =(CHAR **)(新しい新しい INT [長さ]);
     のためのINTI = 0 ; I <長さ。++ I)
    { 
        strNumber [I] = 新しい CHAR [g_MaxNumberLength + 1 ]。
        sprintf(strNumber [i]は、" %のD " 、数字[I])。
    } 

    のqsort(strNumber、長さはsizeofCHAR * )、比較されたいです)。

    以下のためにINT iが= 0 ; I <長さ; ++ I)
        のprintf(" %sの" 、strNumber [I])。
    printf(" \ n個" ); 

    以下のためのint型= I 0、I <長さ; ++ i)は   // 削除する2次元配列を作成するために覚えて
        削除[] strNumber [I]、
     [削除] [] strNumberを; 
} 

// もし[strNumber1] [strNumber2]> [ strNumber2] [strNumber1 ]、戻り値が0より大きい
 // もし[strNumber1] [strNumber2] = [ strNumber2] [strNumber1]、 戻り値が0に等しい
 // [strNumber1]が[strNumber2] <[場合 、strNumber2] [strNumber1] 0以上の値を返す
INT比較します(CONST  ボイド * strNumber1、CONST  ボイド * strNumber2)
{ 
    // [strNumber1] [strNumber2] 
    strcpyの(g_StrCombine1、*(CONST  チャー ** )strNumber1)。
    strcatは(g_StrCombine1、 *(のconst  のchar ** )strNumber2)。

    // [strNumber2] [strNumber1] 
    strcpyの(g_StrCombine2、*(CONST  チャー ** )strNumber2)。
    strcatは(g_StrCombine2、 *(のconst  のchar ** )strNumber1)。

    リターンのstrcmp(g_StrCombine1、g_StrCombine2)。
}
// ====================测试代码==================== 
無効テスト(のconst  のchar *テスト名、INT *数字、int型の長さ、CONST  のchar * expectedResult)
{ 
    もし!(テスト名= nullptr)
        のprintf(" %sは開始します:\ n " 、テスト名)を、

    場合(!expectedResult = nullptr)
        のprintf(" 期待される結果は次のとおりです。\ T%sの\ nは" 、expectedResult)。

    printf(" 実際の結果は次のとおりです。\ T " ); 
    PrintMinNumber(数、長さ)。

    printf(" \ n個" ); 
} 

ボイドTest1を()
{ 
    int型の番号は[] = { 35142 }。
    試験(" Test1を"、数字、はsizeof(番号)/ はsizeofINT)、" 12345 " )。
} 

ボイドTest2を()
{ 
    int型の数[] = { 332321 }。
    テスト("TEST2 "数字、はsizeof(番号)/ はsizeofINT)、" 321323 " ); 
} 

ボイドTest3は()
{ 
    int型の数[] = { 332332123 }; 
    試験(" Test3は"、数字、はsizeof(数字)/ はsizeofINT)、" 321233233 " ); 
} 

ボイドTEST4()
{ 
    int型の数[] = { 111111 }; 
    試験(" TEST4 "、数字、はsizeof(番号)/ はsizeofINT)、" 111111 " ); 
} 

// だけデジタルのアレイ
空隙TEST5行われるべきである()
{ 
    int型の番号[] = { 321 }; 
    テスト(" TEST5が実施されるべきである"、数字、はsizeof(番号)/ はsizeofINT)、" 321 " ); 
} 

ボイドTEST6()
{ 
    テスト("TEST6 "nullptr、 0は" 何も印刷しないでください。" ); 
} 


int型のmain(int型 ARGC、CHAR * ARGV [])
{ 
    Test1を(); 
    Test2を(); 
    Test3は(); 
    TEST4(); 
    TEST5(); 
    TEST6(); 

    戻り 0 ; 
}
テストコード

分析:高速ロウアルゴリズム。

クラス解決{
 パブリックストリング PrintMinNumber(ベクトル< INT > 番号){ 
        
        int型の長さ=(INT )numbers.size();
        文字列 strNumber = "" ; 
        
        ソート(numbers.begin()、numbers.end()、比較)。
        
        以下のためにINT iが= 0 ; I <長さ; ++ I)
            strNumber + = to_stringに(番号[I])。
        
        返すstrNumberを。
    } 
    静的 ブール(比較INT strNumber1、INT strNumber2)
    {
        文字列 g_StrCombine1 = "" ;
        文字列 g_StrCombine2 = "" ; 
        
        // [strNumber1] [strNumber2] 
        g_StrCombine1 + = to_stringに(strNumber1)。
        g_StrCombine1 + = to_stringに(strNumber2)。

        // [strNumber2] [strNumber1] 
        g_StrCombine2 + = to_stringに(strNumber2)。
        g_StrCombine2 + = to_stringに(strNumber1)。

        リターン g_StrCombine1 < g_StrCombine2。
    } 
}。
ネットオフ牛は、コードを提出します

 

おすすめ

転載: www.cnblogs.com/ZSY-blog/p/12634156.html