36.n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系

题目:

谷歌笔试:
n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,
存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。
所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,
比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......
胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,
下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名
编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result[n],求出result。

答案:

//20130415
#include <iostream>

using namespace std;

void kout(int w[][5], int order[], int result[], int n)
{
	int i = 0;
	int j = 0;
	memcpy(result, order, n*sizeof(int));
	while (n > 1)
	{
		i = 0;
		j = 0;
		for (;j < n/2;)
		{
			if (order[i] == w[order[i]][order[i+1]])
			{
				result[j] = order[i];
				result[n-1-j] = order[i+1];
			}
			else
			{
				result[j] = order[i+1];
				result[n-1-j] = order[i];
			}
			i = i + 2;
			j = j + 1;
		}
		  
		if (n % 2 != 0)
		{
			result[j] = order[i];
			n = n + 1;
		}
		n = n/2;
		memcpy(order,result,n*sizeof(int));
	}
}
int main()
{
	int const n = 5;
	int w[][5] = {
		{0,1,0,3,0},
		{1,1,2,3,1},
		{0,2,2,2,4},
		{3,3,2,3,3},
		{0,1,4,3,4}
	};
	int order1[n] = {0,1,2,3,4};

	int result1[n] = {0};
	kout(w, order1, result1, n);

	int const m = 4;
	int s[][5] = {
		{0,1,0,3},
		{1,1,2,3},
		{0,2,2,2},
		{3,3,2,3}
	};
	int order2[m] = {0,1,2,3};
	int result2[m] = {0};
	kout(s, order2, result2, m);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值