30. 谷歌面试题:n支队伍比赛,分别编号为0,1,2。。。。n-1
2014-03-21 23:43
246 查看
题目:
n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w
中,w[i][j]
的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order
中,比如order
= {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......
胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,
下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名
编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result
,求出result。
分析:
这题不难,只需要不断地遍历order表,直到找到所有对比结果。
实现如下:
输出结果为:
result order: 4,0,2,1,3,
n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w
中,w[i][j]
的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order
中,比如order
= {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......
胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,
下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名
编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result
,求出result。
分析:
这题不难,只需要不断地遍历order表,直到找到所有对比结果。
实现如下:
#include<iostream> using namespace std; #define N 5 void GetResult(int (*w) , int* order, int* result) { int i = 0; int k = 1; int j = N -1; while(1) { i = 0; if(i + k > N -1) { result[j] = order[0]; break; } while(i + k <= N-1) { int ii = order[i]; int jj = order[i+k]; if(w[ii][jj] == ii) result[j--] = jj; else { result[j] = ii; order[i]= order[i+k]; order[i+k] = result[j]; j --; } i = i + 2*k; } k *= 2; } } int main() { int a[5][5] = {{0,1,2,3,4},{1,1,2,3,4},{2,2,2,3,4},{3,3,3,3,4},{4,4,4,4,4}}; int order[5] = {4,3,1,2,0}; int result[5]; GetResult(a, order, result); int i = 0; cout << "result order: "; while(i < 5) { cout << result[i++] << ","; } cout << endl; }
输出结果为:
result order: 4,0,2,1,3,
相关文章推荐
- 【编程题目】n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系,
- 36.n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系
- n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组 w[n][n]中,w[i][j] 的值代表编号为 i,j 的队伍中更强的一支。
- n 支队伍比赛,分别编号为0,1,2......n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中。。。
- 每天学习一算法系列(33)(n 支队伍比赛,分别编号为0,1,2......n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强)
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。
- 算法习题36:n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系和出场顺序,求最终排名
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。
- 笔试题&面试题:30个人一共花费50先令,求解男人,女人和小孩的人数分别为多少?
- 剑指Offer:面试题30 最小的k个数
- 一道面试题,一个五位数字ABCDE*4=EDCBA,这个五个数字不重复,请问A,B,C,D,E分别是几?
- 剑指Offer系列-面试题30:最小的K个数
- 谷歌中国算法比赛解题报告 APAC2016A
- 谷歌面试题(持续更新)
- 谷歌面试题(2)
- 【剑指Offer】面试题30:最小的k个数
- 【Java面试题】30 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。
- 二进制数中1的个数(谷歌面试题)
- [Z]谷歌(Google)算法面试题