Likou1688。ゲームバックトラッキングアルゴリズムのマッチング時間

1688.試合の試合数

ゲーム内のチームの数を表す整数nを指定します。コンテストは独自の形式に従います。

現在のチーム数が偶数の場合、各チームは別のチームとペアになります。合計n / 2のゲームがプレイされ、次のラウンドに参加するためにn / 2のチームが生成されます。
現在のチーム数が奇数の場合、ランダムにバイバイが行われ、1つのチームが昇格し、残りのチームが一致します。合計(n-1)/ 2ゲームがプレイされ、(n-1)/ 2 +1チームが生成されて次のラウンドに入ります。
勝ったチームが決定されるまでにゲームで行われた試合の数を返します。

示例 1:

输入:n = 7
输出:6
解释:比赛详情:
- 第 1 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。
- 第 2 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。
- 第 3 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 3 + 2 + 1 = 6
示例 2:

输入:n = 14
输出:13
解释:比赛详情:
- 第 1 轮:队伍数 = 14 ,配对次数 = 7 ,7 支队伍晋级。
- 第 2 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。 
- 第 3 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。
- 第 4 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 7 + 3 + 2 + 1 = 13
 
提示:

1 <= n <= 200

コード:

int numberOfMatches(int n){
    
    
    int sum = 0;
    while(n>1)
    {
    
    
        if(n%2==0)
        {
    
    
            sum=sum+n/2;
            n=n/2;
            continue;
        }
        else
        {
    
    
            sum=sum+(n-1)/2;
            n=(n-1)/2+1;
            continue;
        }
    }
    return sum;
}

おすすめ

転載: blog.csdn.net/xiangguang_fight/article/details/112796116