0

我的帖子

个人中心

设置

  发新话题
单循环赛制
是指所有参赛队在竞赛中均能相遇一次,最后按各队在竞赛中的得分多少、胜负场次来排列名次。


轮数计算比赛轮数:在循环制的比赛中,各队都参加完一场比赛即为一轮。(所有对数同时进行一场比赛为一轮)
参加比赛的队数为单数时,比赛轮数等于队数。如5个队参加比赛,即比赛轮数为五轮。
参加比赛的队数为双数时,比赛轮数等于队数减一。如6个队参加比赛,则比赛轮数为五轮。

场数计算比赛场数:
单循环比赛的场数,可用下面的公式计算(简单的数学组合公式):
比赛场数= 队数*(队数-1)/2
如6个队或7个队参加比赛,则比赛场数为: 6 *(6-1)/2 =15(场)、  7*(7-1)/2 =21(场)

Let's Try
用任意的代码方法实现单循环比赛的分组结果~  


PS:管理们记得给优质回复加无忧币啊~  

本帖最近评分记录
  • lover119 无忧币 +50 精品文章 2017-7-17 20:30



本帖最后由 贵在坚持 于 2017-7-17 19:52 编辑
对于我这样初中数学都学不会的人,连这题的思考方法都没头绪





我爱你,如果肾够好的话,我希望是一万年!


@黄教授s  可以利用搜索引擎啊。




本帖最后由 贵在坚持 于 2017-7-17 20:52 编辑
引用:
原帖由 贵在坚持 于 2017-7-17 20:50 发表
@黄教授s  可以利用搜索引擎啊。
@   完之后,没收到提示,什么鬼???





我爱你,如果肾够好的话,我希望是一万年!


单循环不就是个冒泡排序算法吗。。。



@七彩极 给大家打个样啊,毕竟题太复杂了也不好。



#单循环赛制
#是指所有参赛队在竞赛中均能相遇一次,最后按各队在竞赛中的得分多少、胜负场次来排列名次。
#==============================================================
#sumround:轮数
#sums:比赛次数
#teams:队伍数量
#i:参赛的队伍
#j:另一只参赛队伍
#==============================================================
def test(num):
        global sumround,sums
        for i in range(len(teams)):
                for j in range(i,len(teams)):
                        if i!=j or i>j:
                                #打印比赛顺序
                                print "i:%s,j:%s" %(teams,teams[j])   #这里老显示有问题,真实代码在图片里了
                                sums+=1
                sumround+=1
        print "轮数:%s,次数:%s" %(sumround,sums)
if __name__=='__main__':
        teams=['a','b','c','d','e']
        sumround=0
        sums=0
        #判断队伍数量的单双数
        if len(teams)%2==0:
                test(len(teams))
        else:
                test(len(teams)-1)



写的很简单,当作抛砖引玉了

QQ图片20170719181015.png (1.32 KB)

2017-7-19 18:11

QQ图片20170719181015.png

本帖最近评分记录



本帖最后由 寒桥 于 2017-7-19 18:11 编辑
public class Test3 {
    public static void main(String args[]) {
        rule(8);
    }

    //采用贝格尔编排法,百度单循环赛制
    private static void rule(int n) {
        if (n < 2 || n > 15) {
            System.out.println("false");
            return;
        }
        if (n % 2 == 1) {
            n = n + 1;
            int [] array = new int[n];
            for (int i = 0; i < n - 1; i++) {
                array = i + 1;
            }
            array[n - 1] = 0;
            print(array, n);
        } else {
            int [] array = new int[n];
            for (int i = 0; i < n; i++) {
                array = i + 1;
            }
            print(array, n);
        }
    }

    static void print(int[] array, int n) {
        //数组倒数第二位
        int max = array[n - 2];
        for (int j = 1; j < n; j++) {
            System.out.println("第" + j + "轮");
            //b记录左边,c记录右边
            int [] b = new int[n / 2];
            int [] c = new int[n / 2];
            if (j % 2 == 1) {
                for (int k = 0; k < (n + 1) / 2; k++) {
                    b[k] = array[k + (j - 1) / 2];
                    if (k == 0) {
                        c[k] = array[n - 1];
                    } else {
                        c[k] = b[k] + (max - k * 2);
                        if (c[k] > max) {
                            c[k] = c[k] % max;
                        }
                    }
                    System.out.print(b[k] + "-" + c[k]+ "  ");
                }
            } else {
                for (int k = 0; k < (n + 1) / 2; k ++) {
                    c[k] = array[n / 2 + j / 2 - 1 - k];
                    if (k == 0) {
                        b[k] = array[n - 1];
                    } else {
                        b[k] = c[k] - (max - k * 2);
                        if (b[k] <= 0) {
                            b[k]+= max;
                        }
                    }
                    System.out.print(b[k] + "-" + c[k]+"  ");
                }
            }
            System.out.println();
        }
    }
}
本帖最近评分记录



我就路过看看,看了两位回答,我都晕了



‹‹ 上一贴:【炫耀帖】-听说你有好东西?大胆秀出来吧! ...   |   下一贴:【新手入门】Python简明教程最新版 ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2017 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com