【问题标题】:Using non repeating random number (in C)使用非重复随机数(在 C 中)
【发布时间】:2017-11-26 18:20:37
【问题描述】:

我被分配创建一个非重复数字生成器,它生成 7 个数字。我使用了 rand 函数。但不确定如何确保数字不重复。感谢您的帮助

    int i, n;
    time_t t;
    n = 7;
    srand((unsigned) time(&t));

    for( i = 0 ; i < n ; i++ ) {
    printf("%d\t", rand() % 35);}

【问题讨论】:

  • 用数字1-N填充一个数组,随机打乱数组,从数组中取出前7个数字。洗牌:对于 1 到 N 中的 i,交换元素 i 和从范围 i..N 中随机选择的元素。或者进行网络搜索:这是一个非常常见的问题。

标签: c random srand


【解决方案1】:

您必须将所有先前创建的随机数存储到一个数组中,并且下次您必须将数组值与新创建的随机数进行比较,无论它是否已经创建。请参阅下面的代码并自己尝试。

int i, n;
time_t t;
n = 7;
int randval[n]
int rval = 0;
int j = 0;
srand((unsigned) time(&t));
int found = 0;
for( i = 0 ; i < n ; ) {
  rval = rand();
  j = 0;
  found = 0;
  while(j++ < i ){
     if(rand[j] == rval){
       found = 1;
       break;
     }
  }
  if(!found){      
     randval[i] = rval;
     i++;
     printf("%d\t", rval % 35);
   }
}

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2010-12-09
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多