首页 新闻 会员 周边

一个抽奖算法的疑问——认为在生成的号码中有可能有重复号码

0
悬赏园豆:10 [已解决问题] 解决于 2015-01-04 15:44

代码:

      int n=5,k=3;
     int[] numbers = new int[n];
      for (int i = 0; i < numbers.length; i++)
         numbers[i] = i + 1;
      int[] result = new int[k];
      for (int i = 0; i < result.length; i++)
      {
         // make a random index between 0 and n - 1
         int r = (int) (Math.random() * n);
         result[i] = numbers[r];
         numbers[r] = numbers[n - 1];
         n--;
      }

      // print the sorted array
      Arrays.sort(result);
      for (int r : result)
         System.out.println(r);
   

个人认为,生成的号码还是有可能重复,大家认为呢?

悬赏不多,大家都来讨论下吧。说说自己观点的理由

越老越菜的主页 越老越菜 | 菜鸟二级 | 园豆:284
提问于:2014-12-30 17:37
< >
分享
最佳答案
0

嗯,随机不重复,就是洗牌算法了

收获园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2014-12-31 09:05
其他回答(1)
0

numbers[r] = numbers[n - 1];

写成 numbers[n - 1] = numbers[r] 就不重复了。

哎,问问题不悬赏,真扣。也就我好心回答你了。

收获园豆:5
Slark.NET | 园豆:692 (小虾三级) | 2014-12-30 21:09

像你说的倒过来倒是出现重复的值了。

支持(0) 反对(0) 越老越菜 | 园豆:284 (菜鸟二级) | 2014-12-31 10:35

像你说的倒过来倒是出现重复的值了。原先的倒是测试多次,没有出现重复的值。

支持(0) 反对(0) 越老越菜 | 园豆:284 (菜鸟二级) | 2014-12-31 10:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册