/*
龙舟比赛,这题每次把胜者的编号保存下来,然后对他们进行比较,知道只剩1个胜者
*/
#include<iostream>
using namespace std;
int w[6][6] = {
0,1,2,3,0,0,
1,1,2,1,1,1,
2,2,2,2,2,2,
3,1,2,3,3,3,
0,1,2,3,4,5
};
int order[6]={1,3,4,2,0,5};
int result[6]={-1};
void play(int n)
{
/*
首先声明1个order副数组
假如n=偶数,那么比较1此只有n/2个人留下
n=奇数,比较一次有(n+1)/2个人留下,我们用order_fu来保存留下的人
n=1的时候,就是剩的人了,没人比较的话就是胜利
*/
int *order_fu=new int[n];
int i,j,count;
int cc=n;
while(n!=1)
{
j=0;
count=n;
for(i=0;i<n;i+=2)
{
if(i+1<n)// n双
{
if(w[order[i]][order[i+1]]==order[i])
{
order_fu[j++]=order[i];
result[order[i+1]]=count--;
}
else
{
order_fu[j++]=order[i+1];
result[order[i]]=count--;
}
}
else //单
{
order_fu[j++]=order[i];
}
}
//再复制给order
if(n%2==0)
n=n/2;
else
n=(n+1)/2;
for(i=0;i<n;i++)
order[i]=order_fu[i];
}
result[order_fu[0]]=1;
//输出result
for(i=0;i<cc;i++)
cout<<i+1<<":"<<result[i]<<endl;
cout<<endl;
delete []order_fu;
}
int main(void)
{
play(6);
}