[プログラマー]予想対戦表(JAVA)


対戦予定表


問題の説明
△△△ゲーム大会が行われた.今大会はN人が参加し、トーナメント形式で行われる.N人の参加者は1からNの順に割り当てられる.あと、1番、2番、3番、4番N-1番選手同士でゲームを行います.試合ごとに優勝した人は次のラウンドに入ることができます.このとき、次のラウンドに進んだ参加者番号は1番から順にN/2番に並びます.1番と2番の試合で2番が勝利すれば、次のラウンドで1番が与えられ、3番と4番の試合で3番が勝利すれば、次のラウンドで2番が与えられる.ゲームは最後の一人が残るまで行われます
1回戦ではAの参加者とBの参加者が何回戦で出会う.ゲーム参加者数N、参加者番号A、競合者番号Bを関数解のパラメータとした場合、第1ラウンドにA番を持つ参加者は、競合者と思われるB番の参加者と第数ラウンドで会ったときに返されるsolution関数を完了してください.しかし、A番とB番の出場者は終始リードしていた.

せいげんじょうけん


N:21以上220以下の自然数(2の指数に乗じて不戦勝は起こらない).
A,B:N以下の自然数(ただし,A≠B).
I/O例
N A B answer
8 4 7 3
I/O例説明
I/O例#1
第1ラウンドでは、4人目の参加者が3人目の参加者と競争し、7人目の参加者が8人目の参加者と競争する.私たちはいつも勝つと仮定しているので、4番目の参加者は次のラウンドで2番目、7番目の参加者は4番目になります.2番目のラウンドでは、2番目が1番目に整列し、4番目が3番目に整列します.いつも勝つと仮定しているので、2番は次のラウンドで1番、4番は2番になります.3番目のラウンドでは、1番目と2番目の参加者が加算されるので、3を返します.

My Code

class Solution {
    public int solution(int n, int a, int b) {
        if(a>b) return solution(n,b,a);
        int answer = 1;
        while(!(a%2==1 && a==b-1)) {
            answer++;
            a = a/2 + a%2;
            b = b/2 + b%2;
        }
        return answer;
    }
}

Comment


属相👨🏼‍💻