为什么这只有60??求大神指点
查看原帖
为什么这只有60??求大神指点
1319338
leiyuhan楼主2024/8/27 15:45
#include<bits/stdc++.h>  
using namespace std;  
#define MAXNUM 200  
  
typedef struct  
{  
    int Power;  
    int Id;  
} Country;  
  
Country Att[MAXNUM];  
  
int main()  
{  
    int n, N, Num;  
    cin >> n;  
    N = pow(2, n);  
    int N_1 = N; // 使用N_1来保存原始的国家数  
    int Power_1[MAXNUM] = {0};  
    // 输入国家的能力值和初始化ID  
    for (int i = 0; i < N; i++)  
    {  
        cin >> Att[i].Power;  
        Power_1[i] = Att[i].Power;  
        Att[i].Id = i + 1; // ID从1开始  
    }  
    // 淘汰赛过程  
    int num = 0; // 用来计数剩余国家的能力值在新数组中的索引  
    for (int i = 0; i < n; i++)  
    {  
        int newNum = 0; // 对于每轮淘汰,重新初始化num为记录新数组的索引  
        for (int k = 0; k < N; k += 2)  
        {  
            if (k + 1 < N) // 确保不越界  
            {  
                if (Power_1[k] > Power_1[k + 1])  
                {  
                    Power_1[newNum++] = Power_1[k];  
                }  
                else  
                {  
                    Power_1[newNum++] = Power_1[k + 1];  
                }  
            }   
        }  
        N /= 2;  
        num = 0;  
        // 如果只剩两个国家,找到亚军的能力值  
        if (N == 2)  
        {  
            if (Power_1[0] < Power_1[1])  
                Num = Power_1[0]; // 亚军是能力值较小的那个  
            else  
                Num = Power_1[1];  
            break;  
        }  
    }  
  
    // 找到亚军的国家ID并输出  
    for (int i = 0; i < N_1; i++)  
    {  
        if (Att[i].Power == Num)  
        {  
            cout << Att[i].Id << endl; // 直接输出ID,因为已经从1开始编号  
            break; // 找到后退出循环  
        }  
    }  
  
    return 0;  
}
2024/8/27 15:45
加载中...