一个有关循环赛日程安排的问题,十万火急,100分,绝对信誉!

tanxi4141 2003-11-02 04:47:26
1。问题描述
设有n个运动员要进行网球循环比赛
2。要求
设计一个满足以上要求的比赛要求表
1> 每个选手必须与其他n-1个选手各赛一次
2>每个选手一天只能比赛一次
3>当n是偶数时,循环赛进行n-1天
当n是奇数时,循环赛进行n天
...全文
33 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
steviolet 2003-12-05
  • 打赏
  • 举报
回复
分治法。
解决办法是:你自己画一个多边形,每个点代表一个运动员,然后对角线代表两个人对打。
算法课的作业来着。
ambition2005 2003-11-28
  • 打赏
  • 举报
回复
没看懂 plainsong(短歌) 不加注解,可是不好的编程风格哦

呵呵

开玩笑了
短歌如风 2003-11-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <algorithm>

typedef std::vector<int> IntAry;

int main()
{
int n;
std::cin >> n;
int m = n;
if (m % 2 == 0)
--m;
IntAry Numbers(m + 1);
for(int i = 1; i <= n; ++i)
Numbers[i - 1] = i;
if (m == n)
Numbers[m] = 0;
for (int i = 1; i <= m; ++i)
{
std::cout << "第" << i << "轮:";
for (int j = 0; j < (m + 1) / 2; j ++)
{
std::cout << "<" << Numbers[j] << "," << Numbers[m - j] << "> ";
}
std::cout << std::endl;
std::rotate(Numbers.begin() + 1, Numbers.end() - 1, Numbers.end());
}
}

与0比赛即为轮空。
verbal 2003-11-05
  • 打赏
  • 举报
回复
建议楼主把贴放在“基础类”中,应该会很快得到解决!
smilemac 2003-11-02
  • 打赏
  • 举报
回复
偶数的情况可以
1)先将运动员的对决图作反演变换;
2)然后用回溯法寻找一个(n-1)分图。

奇数的情况可按照plainsong说的化为偶数图处理。
短歌如风 2003-11-02
  • 打赏
  • 举报
回复
奇数时可以加一个不存在的运动员使人数变为偶数,凡和这个不存在的运动员比赛的队员即为该轮轮空。
不过偶数时的安排也比较复杂,algorithm.myrice.com上有一个算法,不过我感觉好象只适用于n=2^k时的情况。

24,857

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧