首页 / 足球精神解读

贝格尔编排法代码

2025-08-27 19:17:50足球精神解读 3569

贝格尔编排法代码

最新推荐文章于 2022-10-05 13:17:03 发布

原创

最新推荐文章于 2022-10-05 13:17:03 发布

·

3k 阅读

·

1

·

0

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

JAVA

同时被 2 个专栏收录

26 篇文章

订阅专栏

算法

7 篇文章

订阅专栏

这篇博客展示了如何使用Java编写适用于单循环比赛的贝格尔编排法代码,包括初始化队伍数组、交换旗标位置、移动队伍和显示对阵等关键步骤。通过输入队伍数量,程序能自动生成比赛轮次安排。期待对算法有深入理解的读者提供改进建议。

摘要生成于

C知道

,由 DeepSeek-R1 满血版支持,

前往体验 >

自己编写的适用于单循环比赛的贝格尔编排法代码,若有可改进之处,望高手指正

import java.util.Scanner;

public class BergerTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

BergerTest ber = new BergerTest();

System.out.println("输入队伍数量:");

Scanner cin = new Scanner(System.in);

int team_Num = cin.nextInt();

if((team_Num&0x1)!=0){

team_Num++;

}

int[] team_arr = new int[team_Num];

ber.init(team_arr, team_Num);

int flag = team_Num-1;//最后一直队伍或者空白队伍的标志

int walk = team_Num/2 -1;//移动步长

for(int i= 0; i< team_Num-1; i++){

System.out.println("第"+(i+1)+"轮:");

if(i>0){

flag = ber.exchangFlag(team_arr, team_Num, flag);

ber.move(team_arr, team_Num, flag, walk);

}

ber.display(team_arr, team_Num);

}

}

public void display(int[] arr,int len){

for(int i = 0; i < len/2; i++){

System.out.println(arr[i]+"...."+arr[len-1-i]);

}

}

//初始化队伍数组

public void init(int[] arr,int len){

for(int i = 0;i < len ; i++){

arr[i] = i+1;

}

}

//return the pos of flag after swap

public int exchangFlag(int[] arr,int len, int flag){

int lastflag = flag;

if(flag != 0){

flag = 0;

}else{

flag = len -1;

}

swap(arr,flag,lastflag);

return flag;

}

public void move(int[] arr,int len, int flag,int walk){

int begin= 1;

int nextPos,beginPosValue;

int nextPosValue = arr[begin];

for(int j = 0; j

beginPosValue = nextPosValue;

nextPos = getNextPos(begin, walk, flag,len);

nextPosValue = arr[nextPos];

arr[nextPos] = beginPosValue;

begin = nextPos;

}

}

public void swap(int[] arr, int flag, int lastflag) {

int temp = arr[flag];

arr[flag] = arr[lastflag];

arr[lastflag] = temp;

}

public int getNextPos(int begin,int walk,int flag,int len){

for(int i = 0 ;i < walk; i++){

begin++;

if((begin%len)== flag)

begin++;

}

return begin%len;

}

}