多人单循环比赛的安排问题

赛程安排 单循环赛 matlab程序 赛程安排 单循环赛 使用固1轮换法的matlab程序如下 参赛队伍为偶数 %% %p为偶数 clc,clear p=10; A=zeros((p-1)*p/2+p-2,2); [m,n]=size(A); %% %构建第一轮比赛排序 for o=1:p/2 A(o,1)=o; A(o,2)=p-o+1; end A %% %构建其他轮比赛排序 for i=1:p-2 for t=1:p/2 ... 阅读详情
有5个队伍参加比赛,A,B,C,D,E,每个队都要与其它队互相赛一场,A-B,A-C,A-D,A-E,B-C......而且一个队伍一天只赛一场,如第一天 A-B,C-D,E轮空,怎么用程序把全部赛程排出来?

原文: http://www.java2000.net/p11024
  1. import java.util.HashMap;
  2. import java.util.HashSet;
  3. import java.util.Map;
  4. import java.util.Set;
  5. /**
  6.  * 多人比赛的安排问题。<br>
  7.  * 一个人每一天只能赛一场。如果有剩下的则轮空。
  8.  * 
  9.  * @author leoklkj,赵学庆 java2000.net
  10.  */
  11. public class T {
  12.   static int[] ids = { 1, 2, 3, 4, 5 };
  13.   static Set<Integer> set = new HashSet<Integer>();
  14.   static Set<Integer> setCheck = new HashSet<Integer>();
  15.   static Set<Integer> tempa;
  16.   static Set<Integer> tempb;
  17.   static Map<Integer, Set<Integer>> map = new HashMap<Integer, Set<Integer>>();
  18.   public static void main(String[] args) {
  19.     for (int id : ids) {
  20.       map.put(id, new HashSet<Integer>());
  21.     }
  22.     int pointer = 0;
  23.     int a;
  24.     int b;
  25.     int total = ids.length * (ids.length - 1) / 2;
  26.     int stop = 20;
  27.     while (total > 0 && stop > 0) {
  28.       if (pointer >= ids.length) {
  29.         pointer = 0;
  30.       }
  31.       if (pointer < 0) {
  32.         pointer = ids.length - 1;
  33.       }
  34.       setCheck.clear();
  35.       a = findNext(pointer);
  36.       // 没找到可用的
  37.       if (a == -1) {
  38.         // 今天结束
  39.         set.clear();
  40.         System.out.println("今天比赛结束1");
  41.         stop--;
  42.         continue;
  43.       }
  44.       set.add(a);
  45.       setCheck.add(a);
  46.       tempa = map.get(a);
  47.       pointer++;
  48.       if (pointer >= ids.length) {
  49.         pointer = 0;
  50.       }
  51.       do {
  52.         b = findNext(pointer);
  53.         if (b == -1) {
  54.           break;
  55.         }
  56.         setCheck.add(b);
  57.         tempb = map.get(b);
  58.         if (!tempa.contains(b) && !tempb.contains(a)) {
  59.           break;
  60.         }
  61.       } while (b != -1);
  62.       if (b == -1) {
  63.         // 今天结束
  64.         set.clear();
  65.         pointer--;
  66.         System.out.println("今天比赛结束2");
  67.         stop--;
  68.         continue;
  69.       }
  70.       tempa.add(b);
  71.       tempb.add(a);
  72.       set.add(b);
  73.       // pointer++;
  74.       System.out.println(a + "/" + b);
  75.       total--;
  76.     }
  77.   }
  78.   static int findNext(int p) {
  79.     int len = ids.length;
  80.     while (len > 0) {
  81.       if (p >= ids.length) {
  82.         p = 0;
  83.       }
  84.       if (p < 0) {
  85.         p = ids.length - 1;
  86.       }
  87.       if (!setCheck.contains(ids[p]) && !set.contains(ids[p])) {
  88.         return ids[p];
  89.       }
  90.       p++;
  91.       len--;
  92.     }
  93.     return -1;
  94.   }
  95. }
运行结果
1/2
3/4
今天比赛结束2
3/5
4/1
今天比赛结束2
5/1
2/3
今天比赛结束2
2/4
3/1
今天比赛结束2
4/5
今天比赛结束2
5/2
蓝桥杯 - 算法训练 比赛安排 C语言实现 算法训练 比赛安排 题目:(蓝桥杯测试有问题) 问题描述   设有有2 n(n 输入格式   输入文件matchplan.in共一行,输入n的数值。 输出格式   输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。   格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。 样例输入 2 阅读详情

相关推荐

清华大学数学建模习题

1)5支球队进行单循环比赛,每天一场,给出一个比赛日程,使每支球队在两场比赛之间至少间隔一天 (要有安排比赛日程的可操作的方法)。

初等数学建模问题

赛程安排问题 问题:五支足球队在同一场地上进行足球赛。进行单循环比赛,也就是说这五支球队的每两支球队在这次比赛中都要结对比赛一次。共进行十场比赛,在连续的十天中每天比赛一场。问如何安排这次比赛的赛程对各队来说都是公平的? 问题分析:1.求什么->赛程安排 2.目标是什么?->公平 对这五个球队随便安排一个赛程如下: 1.AB 2.BC 3.AD 4.DE 5.BD 6.AE 7.CD 8.BE 9.AC 10.CE 各队每两场比赛的相隔场次 A:1,2,2; B:0,2,2; C:4

minghaibuai的博客 2486

排赛程小程序(多人循环赛)

本人为在体育课上排多人循环赛的赛程写的一个小程序,java写的,有界面。

分治法:循环赛日程安排问题

问题:设有n=2^k个选手参加循环赛,要求设计一个满足以下要求比赛日程表: 1)每个选手必须与其它n-1个选手各赛一次; 2)每个选手一天只能赛一次。 分析,按照上面的要求,可以将比赛表设计成一个n行n-1列的二维表,其中第i行第j列的元素表示和第i个选手在第j天比赛的选手号。 采用分治策略,可将所有参加比赛的选手分成两部分,n=2^k个选手的比赛日程表就可以通过n=2^(k-1)

wly_2014的博客 5万+

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 844

OpenEuler22.03 LTS下Zabbix7.0监控系统的容器化部署避坑指南(含Docker-Compose完整配置)

本文详细介绍了在OpenEuler22.03 LTS操作系统上容器化部署Zabbix7.0监控系统的完整流程,包括Docker引擎配置、Docker-Compose编排、网络模式选择及性能调优等关键步骤。针对OpenEuler环境下的特殊问题提供了解决方案,帮助用户高效搭建稳定可靠的监控系统。

python9snake的博客 268

分治法-循环赛日程安排问题

2的k次方个选手的比赛日程是在2的k-1次方个选手的比赛日程的基础上通过迭代的方法求得的。:设有n=2的k次方个运动员要进行网球循环赛。(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能赛一次;(3)循环赛一共进行n-1天。

qq_52291558的博客 2205

MTK平台TP驱动设备树与GPIO配置实战解析

本文详细解析了MTK平台TP驱动开发中的设备树与GPIO配置实战。通过DCT工具配置GPIO引脚,结合设备树节点定义触摸参数,并分享驱动移植、编译调试技巧及常见问题解决方案,帮助开发者快速掌握MTK触摸驱动开发核心。

ice55的博客 236

算法(c++)——循环比赛日程安排问题

算法(c++)——循环比赛日程安排问题 :设有n(n=2^k)支队伍參加循环赛,循环赛共进行n-1天,每支队伍要与其它n-1支队伍比赛一场,且每支队伍每天必须比赛一场,不能轮空。试按此要求为比赛安排日程。运用分治递归法解决该问题。

高冷男孩不吃苹果的博客 2499

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

wuyaqi的博客 511

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3721

单循环赛程安排问题

首先,来解释一下,什么是单循环问题,其实,这是一个我们在实现中经常遇到的问题。 问题描述: 赛程问题:有N个运动员进行单循环赛,即两个运动员都要与其他所有运动员比赛一次。要求每个运动员每天只进行一次比赛,且整个赛程在N-1天内结束,运动员编号由1到N 注:N = 2^k 解题思想: 看到这个问题,我们的第一种想法当然就是用穷举法,找出一个可行的方案。其实这题并不适合用穷举法去解决,因

ljianhui的专栏 8593

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

相邻两个音之间的倍数是2^(1/12),约等于1.0594630943592952645618252949463)。这样一来,高八度的do频率是低八度do的两倍。我们把频率440赫兹作为中央C ,C调的歌就是把频率440赫兹当作do,乐谱中写作:1=C。一个八度分成12份,八个八度的十二平均音率对应的频率如下(从33Hz到7902Hz)。相邻的两个音之间的差一个半音,12345671之间的间隔分别是“全全半全全全半”。D调的歌就是把从440后面第二个音494赫兹当作do,乐谱中写作1=D。

Txwtech 1424

问题 H: 比赛安排

问题 H: 比赛安排时间限制: 1 Sec  内存限制: 125 MB提交: 15  解决: 12[提交][状态][讨论版][命题人:外部导入]题目描述设有2n(n&lt;=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n – 1天内每个队都与不同的对手比赛。例如n=2时的比赛安排:    队           1  2        ...

albertluf的博客 2312

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 308

YOLOv12改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv12轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1218

Java实现 蓝桥杯VIP 算法训练 比赛安排

问题描述   设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。 输入格式   输入文件matchplan.in共一行,输入n的数值。 输出格式   输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。   格式为: A-B,C-D,……。其...

南 墙 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

单循环比赛赛程 java

原文转自:https://blog.51cto.com/haoroid/1854275 问题:有偶数支羽毛球队进行单循环比赛,按照指定算法将每轮的对阵形势打印出来? 解题思路:单循环制是指每支队伍在比赛是均能相遇一次。可采用'U'逆时针旋转法进行对局轮换。 图1.1为有4支队伍的单循环比赛制的流程图 图1.1 单循环赛制步骤图 可将该过程看成数组的循环。 代码实现: 方法1...

菱形站位的博客 2241

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c语言算法单循环球队比赛安排,单循环赛赛程安排算法的研究.doc

单循环赛赛程安排算法的研究单循环赛赛程安排算法的研究摘要:循环赛赛程安排算法是一个很经典的计算机算法,它是分治法的一个经典应用,但该算法只适应于2n支队伍的赛程安排问题,而对于非 2n支队伍的赛程安排问题却没有很好的解决。文章使用可视化语言Visual Basic作为开发工具,借助于循环队列的规律,针对任意n支队伍的赛程安排提出一种直观、方便的算法。关键词:单循环赛;赛程安排;算法;Visual ...

weixin_30676505的博客 600

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于比赛安排的求解问题

设有2^n(n 队    1 2  3 4 比赛  1-2  3-4  第一天 1-3  2-4  第二天 1-4  2-3  第三天 该问题用分治法来解决,这个思想没有问题,但我找了很多资料发现都是用数组来保存结果。虽然分析问题时有分治的思想,但在代码的形式中并没有体现出分治的思想,经过自己的研究,写了一下几个程序。 1、不加任何修饰,只体现算法思想的代码如下: #

cshanzhizi的专栏 786

c语言算法单循环球队比赛安排,单循环赛赛程安排算法研究.doc

单循环赛赛程安排算法研究摘要:循环赛赛程安排算法是一个很经典的计算机算法,它是分治法的一个经典应用,但该算法只适应于2n支队伍的赛程安排问题,而对于非 2n支队伍的赛程安排问题却没有很好的解决。文章使用可视化语言Visual Basic作为开发工具,借助于循环队列的规律,针对任意n支队伍的赛程安排提出一种直观、方便的算法。关键词:单循环赛;赛程安排;算法;Visual Basic 6.0中图分类号...

weixin_42300879的博客 868

蓝桥杯题目练习(比赛安排)

算法训练VIP 比赛安排 原题链接:比赛安排 题目描述 设有有2n(n<=6)个球队进行单循环比赛,计划在2n–1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n–1天内每个队都与不同的对手比赛。 输入 共一行,输入n的数值。 输出 共(2 n – 1)行,第i行输出第i天的比赛安排。 格式为: A-B C-D 其中i是天数,A,B分别为比赛双方的编号,每行共2n-1个比...

122&&113的博客 1054
上一篇: 10月20日,世界骨质疏松日,预防为主
下一篇: 会用就行?够用就行?啥都行?
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值