用C语言编译,一定要可以运行的噢!有错我不会改 问题补充:题目是:网球循环赛日程表(p100,

用C语言编译,一定要可以运行的噢!有错我不会改 问题补充:题目是:网球循环赛日程表(p100,,第1张

/*9.问题描述:设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表

(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

}

朋友,请【采纳答案】,您的采纳是我答题的动力,如果没有明白,请追问。谢谢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8058554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存