| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 3867 人关注过本帖
标题:设定成分含量的随机数生成
取消只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
    您好,lianyicq!
    没错,无论黑球存在与否,包含红球的洞数可能是1~n的任何数。
    无黑球存在时,对应1-n的概率分别为P1—Pn;但黑球存在时,对应1-n的概率分别为p1-pn,但p1-pn与P1-Pn已不再对应相等。   
2016-09-06 16:22
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
    大家好!
    你好,书生牛犊!
    模拟过程是:
    模拟1000次,200个球进200个洞的实验结果;模拟1000次,200个球在200000个干扰球作用下进200个洞的实验结果。
    虽然大家都不赞同我的理解,但和大家分享交流也是受益匪浅的。
    我还是比较坚持我的理解,除非我模拟完成的结果不是我想要的,而是大家所说的。
    目前我的程序出现了问题,我恳求大家先帮我解决这个问题,待我得到模拟结果后,我同样会把结果发在这个帖里,作为每个人观点的主要论据!!
   
    程序现在很奇怪,当NUMBER设为200200时,程序就无法运行,出现下面的结果:

    1.exe 已停止工作
    Windows 可以联机检查该问题的解决方案
    联机检查解决方案并关闭该程序
    关闭程序
    调试程序

    一旦我令NUMBER为20020(小于200200),程序就可以运行,且输出正常结果。
    这究竟是为什么,请各位大侠搁置争议,麻烦帮我解决这个问题,非常感谢!!!!!

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>  //常用于函数strlen、strcmp、strcpy等等
#include <time.h>

#define NUMBER 200200      //生成随机数的长度,或每NUMBER个数统计一次        修改(仅目标粒子:干扰粒子比值变化时修改)
#define ROUND  10     //生成50个随机序列            

#define N 200     //表示200个目标粒子可能对应的全部随机数      修改
#define M 200000   //表示干扰粒子可能对应的全部随机数            修改
#define P 1      //N 除以200                                 修改

int main()
{
  //FILE *fp = NULL;
  FILE * fp=fopen("E:\\suijishu-200200.txt","wt");           //修改
   int rand_buff[NUMBER];    //若NUMBER八九千万甚至过亿长,必须加static,若不是不需加static;NUMBER加上1是为给换行符一个位置
  int rand_ret = 0;    //生成随机数赋值给rand_ret
  int char_arr1[M+N];
 
  int mubiao_count = 0;
  int ganrao_count = 0;    //整数型占4个字节,字符型占1个字节,当将整数赋值给字符数组时会引起溢出,无法运行程序;字符型数组必须以"\0"结尾
  int mubiao_flag = 0;
  int ganrao_flag = 0;
  int i, j,h,k;


  
  for(i=0;i<(M+N);i++)
  char_arr1[i]=i;   //给char_arr1[]字符数组赋值0-N间的数字
  
  
 
  //fp = fopen("random", "a+");
 // if(fp == NULL)
  //{
   // perror("fopen");
  //  return -1;
 // }                            //上述6行使文件无法输出内容,删掉

  srand(time(NULL));

  for(i = 0; i < ROUND; i++)
  {
    //memset(rand_buff, 0, sizeof(rand_buff));   //memset()函数的作用是对结构体或数组最快地进行清零,因此这里是对char rand_buff[]数组清零
    for(k=0;k<NUMBER;k++)
      rand_buff[k]=0;     //用这两行代替memset()函数
      mubiao_count = 0;
    ganrao_count = 0;
    mubiao_flag = 0;
    ganrao_flag = 0;
     
    for(j = 0; j < NUMBER; j++)
    {   
      rand_ret = (rand()*(RAND_MAX+1) + rand())%(M+N);  //随机数赋值给rand_set
      
      if(rand_ret < N)    //上一行生成随机数共M+N个,令rand_ret<=N是为了确保指定随机数生成与指定随机数含量
      {   
        if(!mubiao_flag)  //AT_full_flag=0,故!AT_full_flag的值为1,而1表示满足条件可运行;当AT_count满足含量后AT_full_flag变为1,!AT_full_flag为零,于是停止生成A和T
        {   
          rand_buff[j] = char_arr1[rand_ret%N];  //rand_ret介于1-6间,该行通过char_arr1[0]=A和char_arr1[1]=T来随机生成A和T
          mubiao_count++;   //AT_count用来计数随机数的个数,确保指定随机数的含量
          if(mubiao_count >= (N/P))      //    变化
            mubiao_flag = 1;    //AT_full_flag变为1后,!AT_full_flag为零,于是停止生成A和T
        }   
        else
        {   
          j--;
          continue;
        }   
      }   
      else
      {   
        if(!ganrao_flag)   //CG_full_flag=0,!CG_full_flag=1,满足条件运行
        {   
          rand_buff[j] = char_arr1[(rand_ret)%(M+N)];   //生成C和G
          ganrao_count++;
          if(ganrao_count >= (M/P))       //0.4表示C和G的总量     变化
            ganrao_flag = 1;    //当C+G满足总量后,CG_full_flag变为1,如此!CG_full_flag=0,停止生成C和G
        }
        else
        {
          j--;
          continue;
        }
      }
    }
    //rand_buff[NUMBER]='\0';
    for(h=0;h<NUMBER;h++)
    {
        fprintf(fp,"%d\n",rand_buff[h]);
         //printf("%d\n",rand_buff[h]);
    }
    printf("%d\n",i);
    //fwrite(rand_buff, sizeof(rand_buff), 1, fp);   //其生成一堆乱码,生成纯字符或许可用它,但生成数字不可
   
  }
  

  fclose(fp);
  return 0;
}
 
2016-09-07 09:37
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 25楼 lianyicq
  你好!
  我只验证包含红球的总洞数,1000次足矣!!
  
  另外打搅一下,请问程序问题出在了哪??
  非常感谢!!
2016-09-07 10:08
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
   你好!
   1、即便我改成了每次生成10组【0,200200】之间的随机数,同样无法生成,即使生成1组也是这种情况!
   2、冲突处理怎么调解?
   3、我的程序只用了一次随机,两次随机可实现穿插生成。
   
2016-09-07 10:56
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
    非常感谢ehszt和书生牛犊,帮助我编写、修改了程序,非常谢谢!!
    感谢lianyicq的讨论,谢谢!
    也感谢rjsp的帮助。
    待我把结果作出后,我会把结果公布在这个贴子里,请大家共同讨论!
    谢谢!!
2016-09-07 15:10
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
    非常感谢ehszt和书生牛犊,帮助我编写、修改了程序,非常谢谢!!
    感谢lianyicq的讨论,谢谢!
    也感谢rjsp的帮助。
    待我把结果作出后,我会把结果公布在这个贴子里,请大家共同讨论!
    谢谢!!
2016-09-07 15:10
快速回复:设定成分含量的随机数生成
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022297 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved