n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组 w[n][n]中,w[i][j] 的值代表编号为 i,j 的队伍中更强的一支。
2013-08-05 11:47
274 查看
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。
存储在一个二维数组 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。
class CContest:public CTest { public: void Contest(int (*w)[3],int order[],int n,int result[]) { int *temOrder=new int ; memset(temOrder,0,n); int i,j,k; i=j=k=0; bool flag=true; int len=n; while(k<n) { int *pFrom,*pTo; if(flag){pFrom=order;pTo=temOrder;flag=false;} else{pFrom=temOrder;pTo=order;flag=true;} i=j=0; for(;i<len;i+=2) { if(i+1==len) { pTo[j++]=pFrom[i]; result[k++]=pFrom[i]; break; } if(w[pFrom[i]][pFrom[i+1]]==i) { pTo[j++]=pFrom[i]; result[k++]=pFrom[i+1]; } else { pTo[j++]=pFrom[i+1]; result[k++]=pFrom[i]; } } len=j; } i=0;j=n-1; for(;i<j;i++,j--) swap(result[i],result[j]); } void Test() { int w[3][3]={{0,1,2},{1,1,1},{2,1,2}}; int order[3]={0,1,2}; int result[3]; Contest(w,order,3,result); cout<<"比赛结果:"; for(int i=0;i<3;i++) cout<<setw(5)<<result[i]; cout<<endl; } }; }; using namespace Cracking; //修正后的求next数组各值的函数代码 void get_nextval(char const* ptrn, int plen, int* nextval) { int i = 0; nextval[i] = -1; int j = -1; while( i < plen-1 ) { if( j == -1 || ptrn[i] == ptrn[j] ) //循环的if部分 { ++i; ++j; //修正的地方就发生下面这4行 if( ptrn[i] != ptrn[j] ) //++i,++j之后,再次判断ptrn[i]与ptrn[j]的关系 nextval[i] = j; //之前的错误解法就在于整个判断只有这一句。 else nextval[i] = nextval[j]; } else //循环的else部分 j = nextval[j]; } } void main() { CTest *p=new CContest(); p->Test(); system("pause"); }
相关文章推荐
- 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]中。。。
- n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系和出场顺序,求最终排名
- 36.n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系
- 【编程题目】n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系,
- 算法习题36:n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系
- 谷歌笔试:已知实力对比关系和出场顺序,输出比赛名次
- MongoDB一个基于分布式文件存储的数据库(介于关系数据库和非关系数据库之间的数据库)
- 30. 谷歌面试题:n支队伍比赛,分别编号为0,1,2。。。。n-1
- 2.2 分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小
- 何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?
- 定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个 0~100之间的随机整数,将它们存储到一维数组中,
- 2.3 分别定义float,double类型的变量各一个,并依次输出它们的存储空间大小
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 2.4 分别定义bool,char类型的变量各一个,并依次输出它们的存储空间大小
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天
- 历年世界杯冠军队伍如下,使用map存储这些队伍,使用年份作为key,冠军队伍名称作为value。 完成下面的功能: 1) 输入一个年份,如果当年有世界杯比赛,则输出获奖队伍,如果没有则输出“当年没有举
- 何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?