栈溢出?怎么改!(集五福)
问题描述:
程序描述:集五福 平均抽多少次能集满五福
问题: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;
}