変更コインの問題を解決するための貪欲アルゴリズム

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Textのを。
使用してSystem.Threading.Tasksを。

名前空間コイン
{ 
    クラスプログラム
    { 
        静的 ボイドメイン(文字列[]引数)
        { 
            int型 []の値= 新しい INT [] { 125102050100 }。
            INT [] =カウント新しい int型[] { 3021035 };
             int型 [] =結果新しい新しい INT [count.Lengthの+を1 ]; //は各額面金額を使用する記録され、最後のレコードの変更ケース 
            CoinMoneny(600、値、COUNT、結果); // 600個のブロック変化
            のforeachVARの項目結果)// 場合場所による出力変化
            { 
                Console.WriteLineを(項目); 
            } 
            Console.ReadKey() ;
        } 
        ///  <要約> 
        /// 对货币进行找零
         ///  </要約> 
        ///  <PARAM NAME = "お金"> </ PARAM> 
        ///  <PARAM名= "値"> </ param>の
        ///  <PARAM NAME = "回数"> </ param>の
        ///  <PARAM NAME = "結果"> </ param>の
        公共の 静的な 無効 CoinMoneny(int型、お金、int型 []の値を、int型 []カウント、INT []結果)
        { 
            場合(お金<= 0// 最初により変更する必要があるかどうかを決定
            {
                 リターン; 

            } 
            int型 TEMP = value.Length - 1 // の変更のための最大宗派で始まり
            ながら、真の
            { 
                IF(マネー>値[TEMP] * COUNT [TEMP])// 変化の最大数は、金種の合計数よりも少ない
                { 
                    [TEMP]を結果 = COUNT [TEMP]; // 配列に全ての金種のすべての記録された最大数 
                    マネー-値= [TEMP] * COUNT [TEMP]; // 使用後の金種の硬貨の最大数を見つける
                }
                 // 最大金種が合計数よりも大きいです変更番号
                { 
                    [TEMP]結果 [TEMP]マネー/値=; // 実際の記録の変化量に応じて 
                    お金- = [TEMP] *結果値[TEMP]を。// 残数変化による
                } 
                TEMP = TEMP - 1。 ; // 硬貨の金種に検出
                IF(TEMP < 0 ||マネー<= 0// 終了検索
                {
                     BREAK ; 
                } 
            } 
        } 
       
    } 
}

 

おすすめ

転載: www.cnblogs.com/zhangyang4674/p/11319931.html