【问题标题】:Error is Random Number Generator when initializing an Array初始化数组时错误是随机数生成器
【发布时间】:2015-10-06 10:03:19
【问题描述】:

我一直在研究这段代码,它在 numArray 中生成一个随机数数组,然后将其打乱,将其添加到数组中并打印出数组。这是我完成的代码。

#include <stdio.h>
#include <stdlib.h>

#define SEED 7451
#define ARRAY_SIZE 25
#define LOOPS 10

void InitializeArray(int *numArray, const int arrayLength);
void ShuffleArray(int *numArray, const int arrayLength);
void printArray(int *numArray, const int arrayLength); 

int main()
{
   //informational message
   printf("This Program creates permutations of an array of numbers/n");

   //declare numArray with ARRAY_SIZE values as int
   int numArray[ARRAY_SIZE];

   //seed the random number generator
   srandom(SEED);


   int count;
   int arrayLength= sizeof(numArray); //sizeof(numArray)/sizeof(numArray[0]);


//LOOPED 10 times, use the LOOPS variable
for (count = 0; count < LOOPS; count++){
    //call InitializeArray
    InitializeArray(numArray,arrayLength);

    //call printArray Function to print out normal Array
    printf("Initial Array: \n");
    printArray(numArray,arrayLength);

    //call ShuffleArray to create permutation
    ShuffleArray(numArray,arrayLength);

    //call printArray Function to print out the shuffled list.
    printf("Shuffled Array: \n");
    printArray(numArray,arrayLength);
}
return 0;
}

void InitializeArray(int *numArray, const int arrayLength)
{
   //adds the values in ARRAY_SIZE to the numArray
   int i;
   for (i=0; i< ARRAY_SIZE;i++)
       numArray=random()%(ARRAY_SIZE+1);
}

void ShuffleArray(int *numArray, const int arrayLength)
{
    int i,j,temp;

    for(j = 1; j < arrayLength; j++){
      temp=numArray[j];
      i=j-1;

     while((i >= 0) && (numArray[i] > temp)){
        numArray[i+1]=numArray[i];
        i--;
      }
     numArray[i+1]=temp;
  }
}

void printArray(int *numArray, const int arrayLength)
{
   int i; // initialize counter
   for(i = 0; i < arrayLength; i++)
{
    printf("%d \n",numArray[i]);
}
}

由于某种原因,我的随机数生成器不断给我错误。

numArray=random()%(ARRAY_SIZE+1);

给我一​​个错误。它说有我不明白的铸造错误。谁能帮我修复随机数生成器。

【问题讨论】:

  • 应该是numArray[i]=random()%(ARRAY_SIZE+1);
  • for (i=0; i&lt; arrayLength;i++) *numArray++=random()%(ARRAY_SIZE+1);
  • 除上述之外,您计算arrayLength 的方式将超出范围。另外,既然是常数ARRAY_SIZE,为什么还要计算呢?

标签: c arrays random permutation random-seed


【解决方案1】:

首先函数 random() 不存在,我猜你的意思是 rand()。 srandom() 也是如此,它应该是 srand()。

numArray=random()%(ARRAY_SIZE+1); 必须是 numArray[i]=rand();。如果您想分配某个范围内的整数,可以使用 %(即范围 0-10: rand()%11)。

您的 arrayLength 变量还不正确,因为 sizeof(numArray) 返回数组的大小(以字节为单位)。要获得元素的数量,您必须除以类型的大小: int arrayLength= sizeof(numArray)/sizeof(int);

【讨论】:

    【解决方案2】:

    不完全重新排序数组中的成员,但是,它在您想要生成随机数的范围内的分布上做得不错。 如果它对你有帮助,瞧:

    // get random number within provided base + exponent
    // by Goran Biljetina --> 2012
    
    function isEmpty(value){
        return (typeof value === "undefined" || value === null);
    }
    var numSeq = new Array();
    function add(num,seq){
        var toAdd = new Object();
         toAdd.num = num;
         toAdd.seq = seq;
         numSeq[numSeq.length] = toAdd;
    }
    function fillNumSeq (num,seq){
        var n;
        for(i=0;i<=seq;i++){
            n = Math.pow(num,i);
            add(n,i);
        }
    }
    function getRandNum(base,exp){
        if (isEmpty(base)){
            console.log("Specify value for base parameter");
        }
        if (isEmpty(exp)){
            console.log("Specify value for exponent parameter");
        }
        fillNumSeq(base,exp);
        var emax;
        var eseq;
        var nseed;
        var nspan;
        emax = (numSeq.length);
        eseq = Math.floor(Math.random()*emax)+1;
        nseed = numSeq[eseq].num;
        nspan = Math.floor((Math.random())*(Math.random()*nseed))+1;
        return Math.floor(Math.random()*nspan)+1;
    }
    
    console.log(getRandNum(10,20),numSeq);
    //getRandNum(-10,20);
    //console.log(getRandNum(-10,20),numSeq);
    //console.log(numSeq);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 2018-10-12
      • 2016-08-15
      • 2016-12-24
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多