栈溢出?怎么改!(集五福)

栈溢出?怎么改!(集五福)

问题描述:

img

img

程序描述:集五福 平均抽多少次能集满五福
问题:t最多是518120次 再多一次就出不出来结果 程序哪里有问题 怎么改进

既然问集满,那么你最多需要5个变量来判断是不是都抽到了就行了,为什么要申请一个长达518120长度的数组,把每次的结果都放里面,有意义吗?
你应该定义一个一维数组
int[] list=int[5]
0-4分别表示一个福,数量表示集到福的数量,就行了。
你也完全没必要弄个数组里面存1-5的数字,直接random出0-4的数字,数组对应位置++不就行了
什么时候0-4的位置都不是0了,就表示集满至少一组
这样不可能溢出的。

供参考:

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

int main()
{
    int i, a[5], cnt, card, t = 100, sum = 0;
    srand((unsigned int)time(NULL));
    while (t--) 
    {
        for (i = 0; i < 5; i++) a[i] = 0;//五福卡数组置位归零
        cnt = 0;
        while (1)
        {
            card = rand() % 6;//模拟五福卡,0,1,2,3,4为五福卡之一,5是无效卡
            cnt++;
            if (card < 5) a[card]++;
            if (a[0] != 0 && a[1] != 0 && a[2] != 0 && a[3] != 0 && a[4] != 0)//集齐一次,跳出
                break;
        }
        sum += cnt;//集齐一次的次数累加
    }
    printf("集齐100组,平均抽了%d次。\n", sum/100);
    return 0;
}