我是自学3个月的菜鸟,写了一个算法,效率极低(因为要判断是不是重复号码,所以经常会点好几下才会出来一组号码)        Random R=new Random();
        int r1 = R.Next(1,33);
        int r2 = R.Next(1, 33);
        int r3 = R.Next(1, 33);
        int r4 = R.Next(1, 33);
        int r5 = R.Next(1, 33);
        int r6 = R.Next(1, 33);
        if (r1 != r2 && r1 != r3 && r1 != r4 && r1 != r5 && r1 != r6 && r2 != r3 && r2 != r4 && r2 != r5 && r2 != r6 && r3 != r4 && r3 != r5 && r6 != r3 && r4 != r5 && r4 != r6 && r5 != r6)
        {
            Label1.Text = r1 + " " + r2 + " " + r3 + " " + r4 + " " + r5 + " " + r6;
        }

解决方案 »

  1.   


    declare @table table (id int,col uniqueidentifier)declare @i int ; set @i=0;
    while @i<33
    begin
    insert into @table
    select @i,newid()
    set @i=@i+1
    endselect top 6 id from @table order by col你可以按这个思路写,创建一个数据存上1到33,存每个数字的时候,创建一个guid,然后按guid排序取前6个。第二次的时候,再重新创建,重新排序。无须判读那个重复 创建的时候直接就是1-33。
      

  2.   

    修正一下:
    declare @table table (id int,col uniqueidentifier)declare @i int ; set @i=1;
    while @i<33
    begin
    insert into @table
    select @i,newid()
    set @i=@i+1
    end
    select top 6 id from @table order by col
    /*
    id
    -----------
    30
    17
    4
    25
    19
    27
    */
      

  3.   


     List<int> list = new List<int>();
            Random Ran = new Random();
            for (int i = 0; i < 6; i++)
            {
                int r = Ran.Next(1, 33);
                while (list.Contains(r))
                {
                    r = Ran.Next(1, 33);
                }
                list.Add(r);
            }
            foreach (int r in list)
            {
                Label1.Text += r.ToString() + " ";
            }
      

  4.   

    List<int> list = new List<int>();
    Random rand = new Random(Guid.NewGuid().GetHashCode()); 
    for (int i = 0; i < 6; i++)
    {
     list.Add(rand .Next(1,33));
    }
      

  5.   

    无重复选六个,不用判断重复性:
    List<int> numbers = new List<int>();
    for (int i = 1; i <= 33; i++)
    numbers.Add(i);
    Random rd = new Random();
    for (int i = 0; i < 6; i++)
    {
    int index = rd.Next(numbers.Count);
    Response.Write(numbers[index] + "&nbsp;&nbsp;");
    numbers.RemoveAt(index);
    }