最近在整理硬盘的时候,发现了两年前写过的足球排赛程序,今天我就发布出来,涉及的算法[轮盘],程序中没有处理轮空的情况,这个只要在这个程序上简单的修改就可以实现,暂时先放出 Sql 版(05上测试通过),C# 版我找时间写一下,在放出来

 

DECLARE @Result TABLE
    (
      [Id] INT IDENTITY(11) ,
      [Home] INT , --主场球队ID
      [Away] INT , --客场球队ID
      [Rounds] INT --轮次
    )
DECLARE @Team TABLE
    (
      [Id] INT IDENTITY(11) ,
      [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) 编辑