最近,在写一个连连看游戏时,自己想出一个关于产生一定范围但不重复的一组随机数的算法:
范围:N--M

  int x[M-N];
  for(j = N;j <= M;j++) 
     num[i] = j;             //将这个范围(N--M)内的所有数保存于一个数组;
  int times = 0;             //控制循环次数,即随机数个数;
  int head = 0;
  while(times <= M-N){

     int k=head + (int)( Math.random()*(M-N-head) );
     x[i]=num[k];           /*产生一个随机数,并以此数为下标,注意:次下标必然 
                       >=head;  */              
     int temp=num[head];     //把本次产生的数放到x[head]中,
     num[head]=num[k];        //即与x[head]中的数交换位置
     num[k]-temp;
     head++;                 //head自增,就能保证已经有的数的下标<head;
                             //从而他们就不会再被产生。
      
  }
  该算法的特点就是,每次产生的数,当要求不可重复时(如以次作为连连看游戏中图片显示的位置时)绝对有效的。

 我认为它应该是个有用的算法吧,又不难理解,就写出来供大家参考,如果可能,请给点评价,[color=800080][color=000080]好也罢,坏也罢,总会让我有所新的收获的[/color][/color],谢谢了。