最近在整理硬盘的时候,发现了两年前写过的足球排赛程序,今天我就发布出来,涉及的算法[轮盘],程序中没有处理轮空的情况,这个只要在这个程序上简单的修改就可以实现,暂时先放出 Sql 版(05上测试通过),C# 版我找时间写一下,在放出来
DECLARE @Result TABLE
(
[Id] INT IDENTITY(1, 1) ,
[Home] INT , --主场球队ID
[Away] INT , --客场球队ID
[Rounds] INT --轮次
)
DECLARE @Team TABLE
(
[Id] INT IDENTITY(1, 1) ,
[Teamid] INT --球队ID
)
DECLARE @TeamCount INT ,
@TeamMount INT --队的数目
DECLARE @nRound INT --轮数
DECLARE @i INT ,
@k INT ,
@j INT ,
@y INT
DECLARE @temp INT ,
@Home INT ,
@Away INT ,
@Rounds INT
DECLARE @secound INT ,
@jTeam INT ,
@temp2 INT ,
@contral INT
--控制主客场
SET @contral = 1 ;
SET @y = 1 ;
SET @Rounds = 1 ;
SET @temp = 0 ;
SET @j = 1 ;
SET @i = 0 ;
SET @nRound = 0 ;
SET @TeamMount = 12 ;
SET @TeamCount = 12 ;
IF ( @TeamCount % 2 = 0 )
BEGIN
--产生球队
WHILE @TeamCount > 0
BEGIN
INSERT INTO @Team
( Teamid )
VALUES ( @TeamCount )
SET @TeamCount = @TeamCount - 1 ;
END
--排赛开始
WHILE @nRound < @TeamMount - 1
BEGIN
--两两对打
WHILE @i < @TeamMount / 2
BEGIN
SET @y = @i + 1 ;
SET @k = @TeamMount - @i ;
SELECT @Home = Teamid
FROM @Team
WHERE id = @y ;
SELECT @Away = Teamid
FROM @Team
WHERE id = @k ;
--控制主客场
IF ( @contral % 2 = 0 )
BEGIN
IF ( @Home = 1 )
BEGIN
INSERT INTO @Result
VALUES ( @Away, @Home, @Rounds ) ;
END
ELSE
BEGIN
INSERT INTO @Result
VALUES ( @Away, @Home, @Rounds ) ;
END
END
ELSE
BEGIN
INSERT INTO @Result
VALUES ( @Home, @Away, @Rounds ) ;
END
SET @i = @i + 1 ;
END
--保证下面的继续执行
SET @i = 0 ;
--存贮最后一个元素
SELECT @temp = Teamid
FROM @Team
WHERE id = @TeamMount ;
SELECT @secound = Teamid
FROM @Team
WHERE id = 2 ;
UPDATE @Team
SET Teamid = @secound
WHERE id = @TeamMount ;
SET @jTeam = @TeamMount ;
WHILE @jTeam > 1
BEGIN
SELECT @temp2 = Teamid
FROM @Team
WHERE id = ( @jTeam - 1 ) ;
UPDATE @Team
SET Teamid = @temp2
WHERE id = @jTeam ;
SET @jTeam = @jTeam - 1 ;
END
UPDATE @Team
SET Teamid = @temp
WHERE id = 2 ;
SET @nRound = @nRound + 1 ;
--轮次处理
SET @Rounds = @Rounds + 1 ;
--控制主客场
SET @contral = @contral + 1 ;
END
END
SELECT * FROM @Result
(
[Id] INT IDENTITY(1, 1) ,
[Home] INT , --主场球队ID
[Away] INT , --客场球队ID
[Rounds] INT --轮次
)
DECLARE @Team TABLE
(
[Id] INT IDENTITY(1, 1) ,
[Teamid] INT --球队ID
)
DECLARE @TeamCount INT ,
@TeamMount INT --队的数目
DECLARE @nRound INT --轮数
DECLARE @i INT ,
@k INT ,
@j INT ,
@y INT
DECLARE @temp INT ,
@Home INT ,
@Away INT ,
@Rounds INT
DECLARE @secound INT ,
@jTeam INT ,
@temp2 INT ,
@contral INT
--控制主客场
SET @contral = 1 ;
SET @y = 1 ;
SET @Rounds = 1 ;
SET @temp = 0 ;
SET @j = 1 ;
SET @i = 0 ;
SET @nRound = 0 ;
SET @TeamMount = 12 ;
SET @TeamCount = 12 ;
IF ( @TeamCount % 2 = 0 )
BEGIN
--产生球队
WHILE @TeamCount > 0
BEGIN
INSERT INTO @Team
( Teamid )
VALUES ( @TeamCount )
SET @TeamCount = @TeamCount - 1 ;
END
--排赛开始
WHILE @nRound < @TeamMount - 1
BEGIN
--两两对打
WHILE @i < @TeamMount / 2
BEGIN
SET @y = @i + 1 ;
SET @k = @TeamMount - @i ;
SELECT @Home = Teamid
FROM @Team
WHERE id = @y ;
SELECT @Away = Teamid
FROM @Team
WHERE id = @k ;
--控制主客场
IF ( @contral % 2 = 0 )
BEGIN
IF ( @Home = 1 )
BEGIN
INSERT INTO @Result
VALUES ( @Away, @Home, @Rounds ) ;
END
ELSE
BEGIN
INSERT INTO @Result
VALUES ( @Away, @Home, @Rounds ) ;
END
END
ELSE
BEGIN
INSERT INTO @Result
VALUES ( @Home, @Away, @Rounds ) ;
END
SET @i = @i + 1 ;
END
--保证下面的继续执行
SET @i = 0 ;
--存贮最后一个元素
SELECT @temp = Teamid
FROM @Team
WHERE id = @TeamMount ;
SELECT @secound = Teamid
FROM @Team
WHERE id = 2 ;
UPDATE @Team
SET Teamid = @secound
WHERE id = @TeamMount ;
SET @jTeam = @TeamMount ;
WHILE @jTeam > 1
BEGIN
SELECT @temp2 = Teamid
FROM @Team
WHERE id = ( @jTeam - 1 ) ;
UPDATE @Team
SET Teamid = @temp2
WHERE id = @jTeam ;
SET @jTeam = @jTeam - 1 ;
END
UPDATE @Team
SET Teamid = @temp
WHERE id = 2 ;
SET @nRound = @nRound + 1 ;
--轮次处理
SET @Rounds = @Rounds + 1 ;
--控制主客场
SET @contral = @contral + 1 ;
END
END
SELECT * FROM @Result
posted @ 2012-02-16 14:15 xiao ming 阅读(42) 评论(0) 编辑
