您好,lianyicq!
没错,无论黑球存在与否,包含红球的洞数可能是1~n的任何数。
无黑球存在时,对应1-n的概率分别为P1—Pn;但黑球存在时,对应1-n的概率分别为p1-pn,但p1-pn与P1-Pn已不再对应相等。
没错,无论黑球存在与否,包含红球的洞数可能是1~n的任何数。
无黑球存在时,对应1-n的概率分别为P1—Pn;但黑球存在时,对应1-n的概率分别为p1-pn,但p1-pn与P1-Pn已不再对应相等。
[此贴子已经被作者于2016-9-6 18:38编辑过]
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> void fun1(int sum[][200]){//更正fun1如下,之前的随机逻辑出错了 int red=200,black=200200; for(int j=1000; j; j--) { for(int i=200200; i; i--) { int flag=rand()*1.0/RAND_MAX*(red+black); if(flag<red){//随机到了一个红球 sum[j][rand()%200]++;//随机一个洞入洞 red--; }else black--; } // for(int i=0; i<200; i++)printf("%4d",sum[i]); // printf("\n"); } } void fun2(int sum[][200]){ for(int j=1000; j; j--) { for(int i=200; i; i--) { int flag=rand()%200; sum[j-1][flag]++; } // for(int i=0; i<200; i++)printf("%4d",sum[i]); // printf("\n"); } } int main() { //我在本地运行超时 srand(time(NULL)); int start=0; start=clock(); int sum[1000][200]={0}; fun2(sum); //计算峰值的部分你打算怎么做这个我就不会了。 for(int i=0;i<1000;i++)for(int j=0;j<200;j++)sum[i][j]=0;//重置 fun1(sum); //计算峰值 int end=clock(); printf("%d",end-start);//计算耗时的一个函数,不过我没想到数据量这么大居然只花了5.6秒就搞定 return 0; }
[此贴子已经被作者于2016-9-7 13:02编辑过]
void fun1(int sum[][200]){//更正fun1如下,之前的随机逻辑出错了 int red=200,black=200200; for(int j=1000; j; j--) { for(int i=200200; i; i--) { int flag=rand()*1.0/RAND_MAX*(red+black);//rand()得到一个【0,RAND_MAX】,除于RAND_MAX得到【0,1】的小数乘以剩下的球的总数得到一个随机值 if(flag<red){//如果得到的随机值小于当前红球的剩余数目,则随机到了一个红球 sum[j][rand()%200]++;//再次随找机一个洞 入洞 red--; }else black--; } // for(int i=0; i<200; i++)printf("%4d",sum[i]); // printf("\n"); } }
[此贴子已经被作者于2016-9-7 13:01编辑过]