如何创建非重复随机数?

时间:2014-11-16 16:48:04

标签: c random

我正在尝试为老人家创建一个宾果游戏。我能够使用随机数生成器来制作一个用于扫描阵列但问题是需要很长时间(2分钟)来搜索数组并确保不会重复双打。我做了一些研究,在c中发现了一种称为伪随机的东西,它在创建时不重复数字。但是代码看起来非常复杂,所以我觉得不太习惯我不完全理解的东西。这给我的问题带来了一个简单的方法来创建一个非重复的随机数生成器或一个可以解释一个的好解释?

5 个答案:

答案 0 :(得分:1)

很久以前,我用C编程语言编写了这个非常简单的程序,它生成了0到20之间的10个随机数,不重复任何数字。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10      //Number to be generated.
#define rangeMAX 20 //Upper limit of range.
#define rangeMIN 0  //Lower limit of range.

int main()
{
  int get, c, i, arr[MAX], chk, x;
  c = i = 0;
  srand(time(0)); // this will ensure that every time, program will generate different set of numbers. If you remove this, same set of numbers will generated every time you run the program.
  while(c < MAX)
  {
    get = ((rand() % (rangeMAX-rangeMIN+1)) + rangeMIN); // generate random number.
    //After generating that number check if it is already in array.
    for(i=0; i<=c; i++)
    {
        if(arr[i] == get)
        {
            chk = 0;
            break;
        }
        else if(arr[i] != get)
        {
            chk = 1;
        }
    }
    if(chk==1)
    {
        arr[c]=get;
        printf("%d\n",arr[c]);
        c++;
    }
  }
  return 0;
}

希望这会有所帮助。

答案 1 :(得分:0)

用适当的数字填写数组,然后将其洗牌。

答案 2 :(得分:0)

创建一个包含N个元素的数组,其中每个元素与其索引具有相同的值,如下所示: arr [0] = 0,arr [1] = 1,...

数组中的值可能是您喜欢的任何值(当然不会重复)。

然后通过循环遍历数组并在当前元素与随机位置交换当前元素来移除数组。

现在你的数组被洗牌了,你只需要保持一个从零开始的索引,它保存当前随机数的索引。如果需要新的随机数,请在当前索引处查找数组值,然后增加当前索引。

如果您的索引到达数组的末尾,您只需重新洗牌并将当前索引设置回零。

答案 3 :(得分:0)

有两种方法可以确保随机抽取的数字不会重复:

  • 记住已经看过哪些号码,以便可以拒绝重复
  • 从无重复的序列中提取数字

哪种方法更合适取决于具体情况;两者都可以很容易实现,而且速度非常快,既不普遍适用,也不普遍,更好。&#39;

第二种方法 - 使用无重复序列 - 两者中更简单;在extremis中,它可以用一行或两行代码实现。最近讨论了主题

中的Code Review

关于重复搜索的速度:我确信如果您认为这是您喜欢的方法,我们可以加快几个数量级。

答案 4 :(得分:-1)

Bingo Game VB(添加2个按钮,称为btnNumber和BtnShuffle,在表单设计中添加文本框) (改变100到75或任何数字)

Public Class Form1     Dim randomarray(100)As Integer     Dim Index As Integer = 1     昏暗的计数器作为整数     Dim btnNumber As System.Windows.Forms.Button     Private Sub Btnshuffle_Click(发件人作为对象,e作为EventArgs)处理Btnshuffle.Click         对于i = 1到100             randomarray(i)= i

git reset --hard HEAD
git pull

结束班