如果要考虑队伍的单双数时,应该改用另外一个思路。
当队伍数量是双数时,
思路:a、第1位和最后1位配对,第2位和倒数第2位配对……
b、保持第1位不变,把最后一位移到第二位,再进行配对
c、重复(n-2)次即可。
当队伍数量是单数时,直接在后面加上0,目的一是构成双数来适用上面的算法,目的二是和0配对的那支队伍本轮轮空。
举例:4支队伍时
ABCD 第一轮:A-D B-C 进行转换最后一位D移到第二位
ADBC 第二轮:A-C D-B 进行转换最后一位C移到第二位
ACDB 第三轮:A-B C-D 到这边就结束了!
举例:3支队伍时
ABC0 第一轮:A-0 B-C (A轮空) 进行转换最后一位0移到第二位
A0BC 第二轮:A-C 0-B (B轮空) 进行转换最后一位C移到第二位
AC0B 第三轮:A-B C-0 (C轮空) 到这边就结束了!- @echo off
- setlocal enabledelayedexpansion
- set "zm= ABCDEFGHIJLMNOPQRSTUVWXYZ"
- :main
- cls
- set/p shu=请输入队伍的数量(从2—26):
- set/a a=!shu!%%2
- set str=!zm:~1,%shu%!
- if !a!==0 (set/a lunshu=!shu!-1&set/a b=!shu!/2&set/a c=!shu!-2) else (set/a lunshu=!shu!&set str=!str!0&set/a b=!shu!/2+1&set/a c=!shu!-1)
- for /l %%m in (1 1 %lunshu%) do (
- set str1=&set str2=&set lunkong=&set num= %%m&set s= !str!
- for /l %%n in (1 1 %b%) do (set str1=!str1! !s:~%%n,1!-!s:~-%%n,1!)
- for %%a in (!str1!) do (
- set ss=%%a
- if "!ss:~0,1!"=="0" set lunkong= 轮空:!ss:~-1!&set str2=!str1: %%a=!
- if "!ss:~-1!"=="0" set lunkong= 轮空:!ss:~0,1!&set str2=!str1: %%a=!
- )
- if !a!==0 (echo 第 !num:~-2! 轮对阵表:!str1!) else (echo 第 !num:~-2! 轮对阵表:!str2!!lunkong!)
- set str=!str:~0,1!!str:~-1!!str:~1,%c%!
- )
- pause>nul&goto :main
复制代码
|