谷歌的一道面试题

转载自:http://blog.csdn.net/ylf13/article/details/13627263

#include "stdafx.h"
//============================================================================
// Name        : CompetitionWinner.cpp
// Author      : YLF
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;
#define MAX 10
/*
* just like a heap sort!!
*/
void Competition(int** matrix, int row, int col, int* order, int n);
void Promote(int *order, int index);

int main() {

    int i = 0, j = 0;
    int n = 0;

    //int (*matrix)[MAX]=new int[MAX][MAX];
    int **matrix;
    matrix=new int*[MAX];    //注意*的位置
    for(i=0;i<MAX;i++)
        matrix[i] = new int[MAX];
    int order[MAX];


    //输入队伍实力对比
    cin>>n;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            cin>>matrix[i][j];

    //输入队伍参赛顺序
    for(i=0;i<n;i++)
        cin>>order[i];

    //比赛
    Competition(matrix, n, n, order, n);

    //比赛结果
    cout<<"比赛结果排名:";
    for(i=0;i<n;i++)
        cout<<order[i]<<" ";

    delete []matrix;    //释放堆内存*/
    /*int (*a)[4]=new int[4][4];
    /*for (int i=0;i<4;i++)
    {
        a[i]=new int[4];
    }*/
    
    //delete []a;
    return 0;
}

void Competition(int** matrix, int row, int col, int* order, int n){
    int i = 0, j =0, index = 0;
    int winner = 0;

    while(n>1)
    {
        for(index=0;index<n;index+=2)
        {
            if(index+1 < n)
            {
                //偶数    这里的奇数偶数  指的是当前这一轮参赛的队伍总数是基数还是偶数
                winner = matrix[order[index]][order[index+1]];
                if(winner == order[index])
                    Promote(order,index);
                else
                    Promote(order, index+1);
            }
            else
            {
                //奇数,这里作直接晋级处理
                Promote(order,index);
            }
        }
        n = (n+1)/2;    //重新计算进入下一轮循环赛的队伍总数
    }
} 

void Promote(int *order, int index){
    int temp = order[index];
    order[index] = order[index/2];
    order[index/2] = temp;
    /*for (int i=0;i<4;i++)
    {
    cout<<order[i]<<"  ";
    }
    cout<<endl;*/    //输出排序后的order数组  测试用
}

O7}22`7`64VTJ]VN[MCHT3J

原文地址:https://www.cnblogs.com/audi-car/p/4598763.html