回 帖 发 新 帖 刷新版面

主题:一个菜鸟的疑问

设有2^n(n<=6)个球队进行单循环比赛,计划在2^n-1天内完成,每个队每天进行一场比赛.设计一个比赛的安排,使在2^n-1天内每个队都与不同的对手比赛.例如n=2时的比赛安排为:
队    1 2  3 4
比赛  1-2  3-4  第一天
      1-3  2-4  第二天
      1-4  2-3  第三天
2005奥赛新题集上的
我没做出来[em8][em8]

回复列表 (共4个回复)

沙发

1. 以第一队为标准起点
   第1天,第2天,第3天,第4天......
     2     3     4     5  ......

2. 其他队前面有安排过的,跳过,没安排的,找一个空位安排进去.

3. 重复

板凳

DEFLNG A-Z
n = 2
m = 2^n
DIM s(m, m)
FOR i = 1 TO m
    s(i, 0) = i
NEXT
FOR i = 1 TO m
    FOR j = 1 TO m - 1
        IF s(i, j) = 0 THEN
           FOR k = 1 TO m
               FOR l = 0 TO j - 1
                   IF k = s(i, l) THEN EXIT FOR
               NEXT
               FOR l2 = 1 TO i - 1
                   IF k = s(l2, j) THEN EXIT FOR
               NEXT
               IF l = j AND l2 = i THEN
                  s(i, j) = k
                  s(k, j) = i
                  EXIT FOR
               END IF
           NEXT k
        END IF
NEXT j, i
cls
FOR i = 1 TO m
    FOR j = 0 TO m - 1
        PRINT s(i, j);
        IF j = 0 THEN PRINT "-";
    NEXT
    PRINT
NEXT

3 楼

CLS
L1: INPUT n
IF n < 1 OR n > 6 THEN GOTO L1
n = INT(n)

DIM a(2 ^ n, 2 ^ n), b(2 ^ n)
FOR i = 1 TO 2 ^ n
   FOR j = 1 TO 2 ^ n
      IF i = j THEN a(i, j) = 1 ELSE a(i, j) = 0
   NEXT j
NEXT i

FOR i = 1 TO 2 ^ n - 1     '比赛的天数。'
   c = 1
   FOR j = 1 TO 2 ^ (n - 1)   '每天需要比赛的场次。'
       FOR k = 2 TO 2 ^ n     'C代表参与比赛的一个队,K也是如此。'
          rem 下面程序中b( )值为i说明今天已有比赛场次,a( )为1说明历史上两队已经比赛。
          IF b(c) = i THEN c = c + 1  
          IF a(c, k) <> 1 AND b(c) <> i AND b(k) <> i THEN   
             PRINT TAB(((j - 1) MOD 8) * 8); LTRIM$(STR$(c)); "-"; LTRIM$(STR$(k));
             a(c, k) = 1: b(c) = i: b(k) = i
             EXIT FOR
          END IF
       NEXT k
   NEXT j
   PRINT
NEXT i
END

4 楼

这道题有问题,请问你是彭泽昊吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册