循环赛日程表

来源:互联网 发布:模具编程之模架编程 编辑:程序博客网 时间:2024/04/28 00:56

#include<iostream>
using namespace std;
#define MAXN 64
int a[MAXN+1][MAXN+1]={0};
void gamecal(int k,int n) //处理编号k开始的n个选手日程
{
 int i,j;
 if(n==2)//两个选手
 {
  a[k][1]=k;//参赛选手编号
  a[k][2]=k+1;//对阵选手编号

  a[k+1][1]=k+1;//参赛选手
  a[k+1][k+1]=k;//对阵选手编号
 }
 else
 {
  gamecal(k,n/2);//分开处理
  gamecal(k+n/2,n/2);
 }
 for(i=k;i<k+n/2;i++)//填充右上角
  for(j=n/2+1;j<=n;j++)
  {
   a[i][j]=a[i+n/2][j-n/2];
  }
  for(i=k+n/2;i<k+n;i++)//填充右下角
   for(j=n/2+1;j<=n;j++)
   {
    a[i][j]=a[i-n/2][j-n/2];
   }
}
  
int main(int argc, char* argv[])
{
 int k,n;
 cout<<"请输入从第k个选手开始的编号"<<endl;
 cin>>k;
 cout<<"请输入参赛选手的人数"<<endl;
 cin>>n;
 gamecal(k,n);
 for(int i=1;i<=n;i++)
 {
  for(int j=1;j<=n;j++)
   cout<<a[i][j]<<" ";
  cout<<endl;
 }
 return 0;
}

原创粉丝点击