如何识别每个随机数是否被命中错误

时间:2013-11-07 17:41:49

标签: c arrays random multidimensional-array

所以我正在编写一个程序,我需要生成一组从1到用户输入的某个数字的随机数。然后通过生成的随机数确定从1到N的每个数字被击中的近似概率。所以对于我的代码: -

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

int main(void)
{
printf("Enter a number");
int input;
scanf("%d",&input);
getRandomIntFrom0ToK(input);
return 0;
}

void getRandomIntFrom0ToK (int K)
{
int i;
int j;
int a[2][K+1];
int b[999][999]; 
int counter=0;

srand(time(NULL));

for (i=0;i<K;i++) //Here I am storing the random numbers and indexes of each number 
{
   a[0][i] = i;
   a[1][i]=rand()%K;

}

for(i=0;i<K;i++)//In another array transferring the indexes from the first array
{
    b[0][i]=a[0][i];
}
for(i=0;i<K;i++)//Setting the second column of array b to 0
{
    b[1][i]=0;

}


for(i=0;i<K;i++)//Running two for loops to check in array a if any of the values from the index are equal to any of the random numbers in the second column
{
    for(j=0;j<K;j++)
    {

        if(a[0][i]==a[1][j])//If they are then make the index of array b corresponding to the number equal to 0+1, I will eventually add a certain probability but for now I just want to see that it works
        {
            b[1][i]=b[1][i]+1;

        }
    }
}//Up till here if I run the program, it works

/*for(i=0;i<K;i++)
{
    printf("%d\n",b[0][i]);
}*/

}

所以问题是当包含b数组的printf语句时,该程序不起作用。我知道我的代码效率很低,但我只是想知道我做错了什么。最终我要做的是打印出b数组的两列,以便输出我将使用(1 / K * 100)进入屏幕的数字和相应的百分比。谢谢,任何形式的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

2个问题:缺少原型&amp;过度使用堆栈空间。

OP调用getRandomIntFrom0ToK(input);而不先声明它。不太可能是一个重大问题。这个问题很明显,因为它会导致典型的警告。因此暗示编译器警告被忽略或未完全启用。

void getRandomIntFrom0ToK (int K);
int main(void) {
  ...
  getRandomIntFrom0ToK(input);
  return 0;
}

OP会创建一个变量,这可能是一个问题。好奇,因为OP的帖子足够小。没有printf("%d\n",b[0][i])的编译器可以优化此变量,因为它的值永远不会被读取,只会被分配。由于此变量的长度为数百万字节,因此对于堆栈空间的代码操作,其存在(或不存在)可能会产生显着的结果,通常会通过malloc()来限制该空间。

void getRandomIntFrom0ToK (int K) {
  ...
  // b is maybe millions of bytes
  // int b[999][999]; 
  // Code only uses b[0][...] and b[1][...] 
  int b[2][999]; 

如果确实需要b[999][999],请建议使用malloc()来提供空间。