プログラマー完全ナビゲーション1シミュレーション試験


問題の説明


数学は数学を放棄する人の略語である.「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.最初の問題から最後の問題まで、執胞子は以下の通りである.
1番捕手の撮り方:1,2,3,4,5,1,2,3,4,5...
2番捕手の撮り方:2、1、2、3、2、4、2、5、2、2、3、2、4、2、5...
3番捕手の撮り方:3,3,1,1,2,2,4,5,5,3,3,1,2,2,4,5,5...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.

せいげんじょうけん

  • 試験には最大10000問が含まれています.
  • 題の正解は1,2,3,4,5の1つです.
  • 点数が一番高い人が何人かいる場合は、返される値を昇順に並べてください.
  • I/O例


    answersreturn[1,2,3,4,5][1][1,3,2,4,2][1,2,3]

    に答える

    class Solution {
        public int[] solution(int[] answers) {
            int[] a1 ={1,2,3,4,5};
            int[] a2 ={2, 1, 2, 3, 2, 4, 2, 5};
            int[] a3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
            int c1=0;
            int c2=0;
            int c3=0;
            for(int i = 0; i<answers.length;i++){
                int a = answers[i];
                if (a1[(i%5)]==a) c1++;
                if (a2[(i%8)]==a) c2++;
                if (a3[(i%10)]==a) c3++;
            } 
            int[] answer = {};
            if(c1==c2&&c1==c3) return new int[] {1,2,3};
            if(c1>c2&&c1>c3) return new int[] {1};
            if(c2>c1&&c2>c3) return new int[] {2};
            if(c3>c2&&c3>c1) return new int[] {3};
            if(c1==c2&&c1>c3) return new int[] {1,2};
            if(c1==c3&&c1>c2) return new int[] {1,3};         
            if(c2==c3&&c2>c1) return new int[] {2,3};    
            return answer;
        }
    }
    anwersの長さはわかりませんが、最終的にはすべての学生が同じルールで答えを書くので、最小長の配列を形成し、長さに応じて正解の長さを区切って、残りをインデックスに設定します.
    最後の和弦が汚い.どうすれば簡単に交換できますか?最値を求めてforループに変換し、アレイを再作成すれば良いと思います.