2019-08-24田忌競馬問題JavaScript版

1446 ワード

問題の説明


2つのグループA、Bは、各グループにn人の同級生がいて、すべての同級生の速度を知っています.2つのグループは競走を行ってポイントを獲得し、毎回1人の同級生、勝者+1、敗者-1、引き分け+0を派遣した.A組に最大何点を積むかを聞く.nはn名の同級生を表し、n個の数はAグループの1人当たりの速度を表し、n個の数はBグループの1人当たりの速度を表す.

問題を解く構想.


まず、A組が勝つかもしれないし、負けるかもしれないし、引き分けかもしれないことを明らかにします.
1.まず2つのデータを並べ替えます.
私たちは小さい頃から大きい順に並べ替える必要があります.sort()メソッドのデフォルトは、配列の要素を文字列に変換し(必要に応じて)、文字符号化の順序でソートします.数値ソートが必要なので、自分で関数を定義する必要があります.
  • 策略を確定する:貪欲なアルゴリズムで(1)A組の最後の>B組の最後の1つを実現する:彼ら2人に試合をさせ、A組の積分+1(2)A組の最上位>B組の最上位:彼ら2人に試合をさせ、A組の積分+1(3)その他の状況:A組の最上位をB組の最後の比A群積分-1  c.A群最前一>B群最後一:このような状況には入らない!

  • 3.答え:
        var score = 0;
        function race(n, arr_A, arr_B){
         strategy(arr_A, arr_B)
         console.log("  :", score);
        }
    
        function strategy(arr_A, arr_B){
            var n = arr_A.length;
            if(n === 0){
                return;
            }
            arr_A.sort(sortNumber);
            arr_B.sort(sortNumber);
            if(arr_A[n] > arr_B[n]){
               arr_A.pop();
               arr_B.pop();
                score ++;
            } else if(arr_A[0] > arr_B[0]){
                arr_A.shift();
                arr_B.shift();
                score ++;
            } else {
                if(arr_A[0] != arr_B[n]){
                    score--;
                }
                arr_A.shift();
                arr_B.pop();
            }
            strategy(arr_A,arr_B);
       
        }
        function sortNumber(a,b){
          return a - b
        }
    
        race(3,[12,34,12],[45,1,90]);