(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能参赛一次;
(3)循环赛在n-1天内结束。
请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤ i ≤n,1≤j≤n-1。
*/
#include
#include
using namespace std;
void table(int n)
{
int flag,i,j,t;
//动态内存分配
int *a=new int[n]();
int **b=new int*[n]();
for(i=0;i
for(i=0;i
for(i=0;i
for(j=1;j
for(i=0;i<=n-1;i++)
{
if(i==0)
b[i][j]=j+1; //如果是第一行则为第一个选手与第j+1个选手比赛
else if(i==j)
b[i][j]=1; //如果行数列数相等 则代表第j+1个选手与第一个选手比赛
else
for(t=1;t
if((i+1)==a[t]) //找到a中与选手序号相等的元素
b[i][j]=a[n+1-t]; //则与第i+1个选手比赛的为a中第n+1-t个选手
}
}
for(i=1;i<=n-2;i++)
{
if(i==1)
{
flag=a[n-1]; //用flag存最后一个数组元素
a[n-1]=a[1]; //最后一个元素等于第二个元素
}
a[i]=a[i+1]; //每一个元素等于其后一个元素的值
if(i==n-2)
a[i]=flag; //倒数第二个元素等于原先最后一个元素
}
}
for(i=0;i
cout<
delete a;
delete b;
}
int main()
{
int k,n;
cout<<"请输入k:";
cin>>k;
n=2*k;
cout<<"循环赛事日程表为:"<
return 0;
}
//第一次写的程序 已通过 无错误
/*
#include
using namespace std;
void table(int n)
{
int flag;
int *a=new int[n]();
int **b=new int*[n]();
for(int i=0;i
for(int i=0;i
for(int i=0;i
for(int num=1,j=1;num<=n-1;num++,j++)
{
for(int i=0;i<=n-1;i++)
{
if(i==0)
b[i][j]=j+1;
else if(i==j)
b[i][j]=1;
else
for(int t=1;t
if((i+1)==a[t])
b[i][j]=a[n+1-t];
}
/*{
for(int m=2;m<=n;m++)
{
for(int t=1;t
if((m==a[t])&&(m!=j+1))
b[i][j]=a[n+1-t];
else if(m==(j+1))
b[i][j]=1;
}
}
}*//*
}
for(int i=1;i<=n-2;i++)
{
if(i==1)
{
flag=a[n-1];
a[n-1]=a[1];
}
a[i]=a[i+1];
if(i==n-2)
a[i]=flag;
}
}
for(int i=0;i
cout<
int main()
{
int k,n;
cout<<"请输入k:";
cin>>k;
n=2*k;
cout<<"循环赛事日程表为:"<
return 0;
}
*/
//本题难度较大
//第一次把程序写出来时 很多错误 甚至输出很多负数 改了很多次 才把逻辑搞对
//中国地质大学王勋广写 侵权必究