进行骰子实验,增加最大投掷次数

时间:2018-09-05 20:32:23

标签: c arrays

我正在构建一个简单的程序来对骰子实验中的数字频率进行计数,但是我尝试对其进行扩展,并将最大掷出次数增加到巨大的数目,并且通过反复试验,我发现最大限制为519253。

使用这个最大值,我也无法创建任何新数组,它会崩溃。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MX 519253
#define DICE 6
void throwdice(int n[], int size);
int genNum();
void printv(int n[], int size);
void countd(int n[], int size, int count[DICE]);
int main ()
{
    srand(time(NULL));
    int throws[MX];
    int count[DICE]={0};
    int n;
    //printf("Number of dice to throw: ");
    //scanf("%d",&n);
    n=MX;
    throwdice(throws,n);
    //printf("Throw\tNumber");
    //printv(throws,n);
    countd(throws,n,count);
    printf("\n\nNumber\tFrequency");
    printv(count,DICE);
}
int genNum()
{
    int n;
    n=rand()%DICE+1;
    return n;
}

void printv(int n[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        printf("\n%d  \t%d",i+1,n[i]);
}

void throwdice(int n[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        n[i]=genNum();
}

void countd(int n[], int size, int count[DICE])
{
    int i;
    for (i = 0; i < size; i++)
        count[n[i]-1]++;
}

是否有一种方法可以扩展此程序,以解决一百万次抛出?

1 个答案:

答案 0 :(得分:3)

尝试更改此内容;

int throws[MX];

为此,或将其移至全局范围;

static int throws[MX];

我认为您可能正在堆栈溢出。

您可以尝试像这样将数组放在堆上;

int *throws = malloc(sizeof(int)*MX);