java 循环赛问题_循环赛日程安排问题

// team: 比赛安排结构,team[2k] vs team[2k+1]

// len:  team的总数

// id:   第id轮的安排,id的范围[1, len-1]

voidgame(int*team,intlen,intid){

intbase= 2;

while(id > len/base){

id -= len/base;

base<<= 1;

}

for(inti=0; i

intstart = i+base/2+(id-1)*base;

for(intj=0; j

team[i*2*len/base+2*j] =base*j+i;

team[i*2*len/base+2*j+1] = (start+base*j)%len;

}

}

}

// 以下是測试部分

voiddump(int*arr,intlen){

for(inti=0; i

printf("%02d-%02d ", arr[i], arr[i+1]);

printf("/n");

}

intmain(){

constintlen = 16;

intteam[len];

for(inti=1; i

game(team, len, i);

printf("[%02d] ", i);

dump(team, len);

}

return0;

}

输出结果:

[01] 00-01 02-03 04-05 06-07 08-09 10-11 12-13 14-15

[02] 00-03 02-05 04-07 06-09 08-11 10-13 12-15 14-01

[03] 00-05 02-07 04-09 06-11 08-13 10-15 12-01 14-03

[04] 00-07 02-09 04-11 06-13 08-15 10-01 12-03 14-05

[05] 00-09 02-11 04-13 06-15 08-01 10-03 12-05 14-07

[06] 00-11 02-13 04-15 06-01 08-03 10-05 12-07 14-09

[07] 00-13 02-15 04-01 06-03 08-05 10-07 12-09 14-11

[08] 00-15 02-01 04-03 06-05 08-07 10-09 12-11 14-13

[09] 00-02 04-06 08-10 12-14 01-03 05-07 09-11 13-15

[10] 00-06 04-10 08-14 12-02 01-07 05-11 09-15 13-03

[11] 00-10 04-14 08-02 12-06 01-11 05-15 09-03 13-07

[12] 00-14 04-02 08-06 12-10 01-15 05-03 09-07 13-11

[13] 00-04 08-12 01-05 09-13 02-06 10-14 03-07 11-15

[14] 00-12 08-04 01-13 09-05 02-14 10-06 03-15 11-07

[15] 00-08 01-09 02-10 03-11 04-12 05-13 06-14 07-15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值