(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能参赛一次;
(3)循环赛在n-1天内结束。
请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤ i ≤n,1≤j≤n-1。
*/
#include <iomanip>
#include <iostream>
using namespace std
void table(int n)
{
int flag,i,j,t
//动态内存分配
int *a=new int[n]()
int **b=new int*[n]()
for(i=0i<ni++)
b[i]=new int[n]()
for(i=0i<ni++)
a[i]=i+1
for(i=0i<ni++)
b[i][0]=i+1//使比赛日程表第一列为从1到n的数 代表选手序号
for(j=1j<nj++)
{
for(i=0i<=n-1i++)
{
if(i==0)
b[i][j]=j+1//如果是第一行则为第一个选手与第j+1个选手比赛
else if(i==j)
b[i][j]=1//如果行数列数相等 则代表第j+1个选手与第一个选手比赛
else
for(t=1t<nt++)
{
if((i+1)==a[t]) //找到a中与选手序号相等的元素
b[i][j]=a[n+1-t]//则与第i+1个选手比赛的为a中第n+1-t个选手
}
}
for(i=1i<=n-2i++)
{
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=0i<ni++){
for(j=0j<nj++)
cout<<b[i][j]<<" "//输出比赛日程表 第一列代表选手序号
cout<<endl
}
cout<<endl
//释放空间
delete a
delete b
}
int main()
{
int k,n
cout<<"请输入k:"
cin>>k
n=2*k
cout<<"循环赛事日程表为:"<<endl
table(n)
return 0
}
//第一次写的程序 已通过 无错误
/*
#include <iostream>
using namespace std
void table(int n)
{
int flag
int *a=new int[n]()
int **b=new int*[n]()
for(int i=0i<ni++)
b[i]=new int[n]()
for(int i=0i<ni++)
a[i] =i+1
for(int i=0i<ni++)
b[i][0]=i+1
for(int num=1,j=1num<=n-1num++,j++)
{
for(int i=0i<=n-1i++)
{
if(i==0)
b[i][j]=j+1
else if(i==j)
b[i][j]=1
else
for(int t=1t<nt++)
{
if((i+1)==a[t])
b[i][j]=a[n+1-t]
}
/*{
for(int m=2m<=nm++)
{
for(int t=1t<nt++)
{
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=1i<=n-2i++)
{
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=0i<ni++){
for(int j=0j<nj++)
cout<<b[i][j]<<" "
cout<<endl
}
cout<<endl
}
int main()
{
int k,n
cout<<"请输入k:"
cin>>k
n=2*k
cout<<"循环赛事日程表为:"<<endl
table(n)
return 0
}
*/
//本题难度较大
//第一次把程序写出来时 很多错误 甚至输出很多负数 改了很多次 才把逻辑搞对
//中国地质大学王勋广写 侵权必究
#include<iostream>#include <deque>
#include <vector>
#include <stdlib.h>
using namespace std
#define TeamCount 4
#define NumberCount 8
void RandGroup(deque<int>& deqSrc, vector<vector<int>>& rVecDec)
{
srand(time(NULL))
int nSrcSize = deqSrc.size()
vector<int> vecSample
for (int i = 0 i < nSrcSize i++)
{
// 取队员
int nPlayer = deqSrc.front()
deqSrc.pop_front()
vecSample.clear()
// 获取不满NumberCount的队伍集合
for (int j = 0 j < TeamCount j++)
{
if (rVecDec[j].size() < NumberCount)
vecSample.push_back(j)
}
// 获取该队员的随机队列编号
int nTmp = rand()
nTmp = rand() % (vecSample.size())
rVecDec[vecSample[nTmp]].push_back(nPlayer)
}
}
int main()
{
// 生成32个队员
deque<int> deq
for (int i = 0 i < TeamCount * NumberCount i++)
{
int nPlayer = 0
cin >> nPlayer
deq.push_back(nPlayer)
}
// 随机分组
vector<vector<int>> vecRes
for (int i = 0 i < TeamCount i++)
{
vector<int> vecTmp
vecRes.push_back(vecTmp)
}
RandGroup(deq, vecRes)
return 0
}
朋友,请【采纳答案】,您的采纳是我答题的动力,如果没有明白,请追问。谢谢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)