解答-予想対戦表
5642 ワード
対戦予定表
問題の説明
△△△ゲーム大会が行われた.今大会は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).
に答える Nがありますが、果たしてNが必要ですか? に勝った人は、次の番号が何試合目かに等しい. が再び入り、2人の参加者が同じ試合に属していることを確認した瞬間、どうなりますか? さいきかんすう a,bの試合番号を確認します. の場合、 を返します.が違うと、再び角 をつなぎます
に入ってroundを設定し、入るたびにroundを追加します. 最初の解釈
改善
他の解答を見て、改善点を発見しました.の次の試合が の再帰関数ではなく、簡単な複文を使用できます. 改善された回答の適用
問題の説明
△△△ゲーム大会が行われた.今大会は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).
に答える
parseInt( (n+1)/2)
function solution(n, a, b) {
return rec(1, a, b)
}
function rec(round, a, b) {
const am = getNext(a)
const bm = getNext(b)
if (am === bm) return round
else return rec(round + 1, am, bm)
}
function getNext(n) {
return parseInt((n + 1) / 2)
}
再帰関数を使用して解く改善
他の解答を見て、改善点を発見しました.
parseInt((n + 1) / 2)
のようにMath.ceil(n/2)
の形で行われるよりも簡潔だ.function solution(n, a, b) {
const f = (n) => Math.ceil(n / 2)
let answer = 0
while (a !== b) {
a = f(a)
b = f(b)
answer++
}
return answer
}
不要な再帰関数を削除し、使用する関数を内部関数に変更します.Reference
この問題について(解答-予想対戦表), 我々は、より多くの情報をここで見つけました https://velog.io/@cckn/알고리즘-풀이-예상-대진표テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol