谷歌笔试:已知实力对比关系和出场顺序,输出比赛名次
2012-05-24 16:53
316 查看
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。
测试用例:temp2 > temp1 > temp3 > temp0 > temp4 > temp5
,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。
#include <iostream> #include <stack> #include <vector> using namespace std; stack<int> Result(int w[][100], int n, vector<int> order) { stack<int> result;//用此栈存储名次 vector<int>::size_type i=0; while(result.size()<n) { vector<int>::iterator iter=order.begin(); if(order.size()==1)//如果只剩下一个,那么这个就是第一名了,进栈,全部比赛结束 { result.push(*iter); break; } i=0; vector<int> ordertemp; while(i < order.size()) { if(i!=order.size()-1)//此情况相当于本轮比赛的队伍数为偶数的情况 { if(w[*iter][*(iter+1)]==*iter) { ordertemp.push_back(*iter);//赢的进下一轮比赛 result.push(*(iter+1));//输的进栈 } else { ordertemp.push_back(*(iter+1)); result.push(*iter); } i+=2; iter+=2; } else//此情况相当于本轮比赛的队伍数为奇数的情况,最后一支队伍,没有别的队和它比,直接进下一轮比赛 { ordertemp.push_back(*iter); break; } } order=ordertemp;//更新队伍 } return result; } void main() { int n; cout<<"请输入参赛对数:"; cin>>n; int w[100][100]; cout<<"请输入实力对比关系:"<<endl; for(int i=0; i<n; i++) for(int j=0; j<n; j++) cin>>w[i][j]; int ord; vector<int> order; cout<<"请输入出场顺序:"; for(i=1; i<=n; i++) { cin>>ord; order.push_back(ord); } stack<int> result=Result(w, n, order); cout<<"比赛名次(从前到后):"; while(!result.empty()) { cout<<result.top()<<" "; result.pop(); } }
测试用例:temp2 > temp1 > temp3 > temp0 > temp4 > temp5
相关文章推荐
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系和出场顺序,求最终排名
- n 支队伍比赛,分别编号为0,1,2......n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中。。。
- 算法习题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 的队伍中更强的一支。
- n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组 w[n][n]中,w[i][j] 的值代表编号为 i,j 的队伍中更强的一支。
- 每天学习一算法系列(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,已知它们之间的实力对比关系
- 用R语言分析《我是歌手》出场顺序与名次的关系
- AI芯片产业生态及竞争格局:英伟达、谷歌、BAT实力拆解对比
- 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题) 句子中单词以空格符隔开。为简单起见,没有标点符号。 例如输入“I am a student”,则输出“student a
- hdu 1285 确定比赛名次(给一个拓扑有序图要求输出拓扑有序序列)
- 找出最小的k个元素,不需要按顺序输出。已知k很小。在k小到一定程度的时候,有比大顶堆更快的方法。
- 【100题】第三十六 比赛淘汰问题(谷歌笔试)
- 【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
- 【100题】第三十六 比赛淘汰问题(谷歌笔试)
- 【100题】第三十六 比赛淘汰问题(谷歌笔试)
- 36 输出比赛名次的数组result
- 【100题】第三十六 比赛淘汰问题(谷歌笔试)