您的位置:首页 > 职场人生

谷歌的一道面试题

2015-06-24 22:07 471 查看
转载自:/article/2947152.html

#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数组  测试用
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: