C# “贝格尔”编排法

采用“贝格尔”编排法,编排时如果参赛队为双数时,把参赛队数分一半(参赛队为单数时,最后以“0”表示形成双数),前一半由1号开始,自上而下写在左边;后一半的数自下而上写在右边,然后用横线把相对的号数连接起来。这即是第一轮的比赛。

第二轮将第一轮右上角的编号(“0”或最大的一个代号数)移到左角上,三轮又移到右角上,以此类推。

即单数轮次时“0”或最大的一个代号在右上角,双数轮次时则在左上角。如下表示:

7个队比赛的编排方法

第一轮    第二轮   第三轮   第四轮    第五轮   第六轮    第七轮

1-0  0-5  2-0  0-6  3-0  0-7  4-0

2-7  6-4  3-1  7-5  4-2  1-6  5-3

3-6  7-3  4-7  1-4  5-1  2-5  6-2

4-5  1-2  5-6  2-3  6-7  3-4  7-1

无论比赛队是单数还是双数,最后一轮时,必定是“0”或最大的一个代号在右上角,“1”在右下角。

根据参赛队的个数不同,“1”朝逆时针方向移动一个位置时,应按规定的间隔数移动(见表),“0”或最大代号数应先于“1”移动位置。

C#实现:

protected void Page_Load(object sender, EventArgs e)
{
    List<int[]> list = new List<int[]>();
    List<int> teams = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
    int[] array = teams.ToArray();
    //参赛队数数量
    int initlen = array.Length;
    //比赛轮次
    int turns = initlen - 1;
    //如果为奇数,用0补空
    if (Convert.ToBoolean(initlen % 2))
    {
        teams.Add(0);
        turns = initlen;
    }
    list.Add(teams.ToArray());
    int max = teams[teams.Count - 1];
    //间隔数,计算公式为(n-4)/2+1
    int steps = initlen <= 4 ? 1 : (initlen - 4) / 2 + 1;

    List<int> parseList = teams;
    int temp = 0;
    for (int n = 0; n < turns; n++)
    {
        //移除空位
        bool isMax = parseList[0] == max ? true : false;
        parseList.RemoveAt(parseList[0] == max ? 0 : parseList.Count - 1);
        int[] tempArray = parseList.ToArray();
        int templen = tempArray.Length;
        int tempLen = isMax ? steps + 2 : steps;
        for (int i = 0; i < tempLen; i++)
        {
            //右位移
            temp = tempArray[templen - 1];
            for (int j = templen - 2; j >= 0; j--)
            {
                tempArray[j + 1] = tempArray[j];
            }
            tempArray[0] = temp;
        }
        //补空位
        string tempString = isMax ?
            string.Format("{0},{1}", string.Join(",", tempArray), max) :
            string.Format("{0},{1}", max, string.Join(",", tempArray));
        int[] parseArray = Array.ConvertAll<string, int>(tempString.Split(‘,‘), s => int.Parse(s));
        parseList = new List<int>(parseArray);
        list.Add(parseArray);
    }
    //分队
    for (int i = 0; i < list.Count; i++)
    {
        Response.Write(string.Format("---------第{0}轮--------<br/>", i));
        int[] ar = list[i];
        int length = ar.Length / 2;
        int[] left = new int[length], right = new int[length];
        List<int> lll = new List<int>();
        for (int j = 0; j < length; j++)
        {
            left[j] = ar[j];
            right[j] = ar[j + length];
        }
        Array.Reverse(right);
        for (int j = 0; j < left.Length; j++)
        {
            Response.Write(string.Format("{0},{1}<br/>", left[j], right[j]));
        }
    }
}

  

结果:

---------第0轮--------
1,0
2,7
3,6
4,5
---------第1轮--------
0,5
6,4
7,3
1,2
---------第2轮--------
2,0
3,1
4,7
5,6
---------第3轮--------
0,6
7,5
1,4
2,3
---------第4轮--------
3,0
4,2
5,1
6,7
---------第5轮--------
0,7
1,6
2,5
3,4
---------第6轮--------
4,0
5,3
6,2
7,1
---------第7轮--------
0,1
2,7
3,6
4,5

原文地址:https://www.cnblogs.com/sntetwt/p/8395178.html

时间: 2024-10-16 14:32:54

C# “贝格尔”编排法的相关文章

治疗性厌恶的凯格尔练习

凯格尔练习,是在50年代,阿诺尔德’凯格尔为了治疗尿失禁,而采用的一种练习法.后来凯格尔发现,这种方法不仅可以恢复骨盆肌的紧张力,而且可以刺激生殖器区,增加生殖区的血流量,从而改善性功能.这个练习分4个基本练习步骤. 练习一:收缩耻骨尾骨肌(耻骨尾骨肌覆盖在耻骨及尾骨之间的区域,包围和支持性器官及邻近结构.收缩时可牵拉阴唇而刺激阴.蒂,是提高性兴奋,唤起性冲动的重要肌群),保持3秒钟,然后放松.这样重复练习,10次为一组,每天练习3组以上.以后逐渐增加到25次为一组. 练习二:和练习一一样,收缩

数值计算实验报告---复合求积公式(梯形、抛物线、龙贝格)、导数求值(三点、四点、五点公式)

----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy ··复合抛物线公式: ··龙贝格公式: 四.实验内容 ------1 实验题目1中所用到的三种算法的matlab实现代码具体如下: %复合梯形公式 function y=funct(f,n,a,b) fi=f(a)+f(b); h=(b-a)/n; d=1; for i=1:n-1 x=a+i*h; fi=fi+2*f(x); d=d+1; end f4=h/2*fi,d %

【C/C++】实现龙贝格算法

1. 复化梯形法公式以及递推化 复化梯形法是一种有效改善求积公式精度的方法.将[a,b]区间n等分,步长h = (b-a)/n,分点xk = a + kh.复化求积公式就是将这n等分的每一个小区间进行常规的梯形法求积,再将这n的小区间累加求和. 公式如下: 使用复化梯形法积分时,可以将此过程递推化,以更方便的使用计算机实现.设积分区间[a,b],将此区间n等分,则等分点共有n+1个,使用复化梯形积分求得Tn.进行二分,二分结果记为T2n,则有: 2. 龙贝格积分公式 龙贝格积分实际上是提高收敛速

龙贝格算法

求积分的龙贝格算法 计算f(x)=1/x在[1,3]上的积分: 1 #include <iostream> 2 #include <cstring> 3 #include <cmath> 4 using namespace std; 5 6 double f(double x){ 7 return 1.0/x; 8 } 9 10 int main(){ 11 double a,b;//积分区间的上界和下届 12 a=1; 13 b=3; 14 15 double t[1

奥格尔巧妙kfifo

奥格尔巧妙kfifo Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:October 8th, 2014 学不考儒,务掇精华.文不按古,匠心独运.Linux kernal 鬼斧神工,博大精深.让人叹为观止.拍手叫绝.然匠心独运的设计并不是扑朔迷离.盘根错节.真正的匠心独运乃辞简理博.化繁为简,在简洁中昭显优雅和智慧.kfifo就是这样一种数据结构,它就是这样简约高效,匠心独运,妙不

龙贝格求积算法

龙贝格求积算法python实现 import numpy as np def trapezoid(a, b, n, func): """ 复化梯形公式求函数func在区间[a,b]上的积分值 n是等分的区间数目 """ x = np.linspace(a, b, num=n + 1) y = func(x) h = (b - a) / (2 * n) return h * (y[0] + 2 * np.sum(y[1:-1]) + y[-1])

龙贝格公式计算定积分

1 #include<stdio.h> 2 #include<math.h> 3 #define maxlen 100 4 #define eps 0.5*1e-5 5 double a=0; 6 double b=1; 7 double f(double x){ 8 return 4/(1+x*x); 9 } 10 double t(int n){ 11 int i; 12 double sum, h = (b - a) / n; 13 for (i = 1; i < n;

诺贝尔物理学奖

历年得主 编辑 年份 获奖者 国籍 获奖原因 1901年 威廉·康拉德·伦琴 德国 "发现不寻常的射线,之后以他的名字命名"(即X射线,又称伦琴射线,并用伦琴做为辐射量的单位) 1902年 亨得里克·安顿·洛伦兹 荷兰 "关于磁场对辐射现象影响的研究"(即塞曼效应) 彼得·塞曼 荷兰 1903年 安东尼·亨利·贝克勒尔 法国 "发现天然放射性" 皮埃尔·居里 法国 "他们对亨利·贝克勒教授所发现的放射性现象的共同研究" 玛丽·

大一理论标准试题

一.标准试题 1国防的类型有哪些?我国国防属于什么类型的国防? 扩张型,自卫型,联盟型,中立型 我国属于自卫型国防 --新中国国防建设取得了那些成就 建立和完善了有中国特色的武装力量领导体制 中国人民解放军的现代化,正规化和革命化建设有了突破性的进展 形成了门类齐全,综合配套的国防科技工业体系 --海湾战争.阿富汗战争.科索沃战争.伊拉克战争分别爆发于哪一年? 1991年.2001年.1999年.2003年 --解放战争时期,决定中国命运的三次战略决战(著名的三大战役)是哪三次战役? 平津战役,