范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C自定义随机数函数随机数分布及应用场景

  生成随机数的功能在某些类型的程序中非常有用,特别是在游戏、统计建模程序和需要对随机事件建模的科学模拟中。以游戏为例,如果没有随机事件,怪物总是以同样的方式攻击你,你总是会找到同样的宝藏,地牢的布局永远不会改变,等等……这不会成为一个很好的游戏。1 自定义简单的伪随机数函数
  基本思路是通过设置种子数、组合乘法、加法和迭代,再通过循环求余便可以得出一些简单的随机数。#include  #include  unsigned int PRNG() {     static unsigned int seed = 5323;  // 利用静态变量在每次调用时都会更新其值     seed = 8253729 * seed + 2396403;     return seed % 32768; } int* rnd(int rng,int size) {     int *arr = (int*)malloc(sizeof(int)*size);     for (int i=0; i < size; ++i)     {         arr[i] = PRNG()*rng/32768;     }     return arr; } void arrPrint(int *arr,int size) {     for (int i=0; i < size; ++i)     {         printf("%d ",arr[i]);         if ((i+1) % 5 == 0)             printf(" ");     } } int main() {     int *arr = rnd(10,20);// 0-10,不包括10的随机数     arrPrint(arr,20);     getchar();     return 0; } /* 7 8 6 3 8 3 9 6 6 0 8 1 1 8 4 8 3 8 6 7 */2 标准库中的随机数函数
  标准库中有两个函数用于产生随机数:srand(int);      //设置起始种子值 rand();            // 产生随机数
  头文件中的time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。可以以这个秒数作为随机数的种子值。#include  #include   // for std::rand() and std::srand() #include     // for std::time() int main() {     srand(time(0));     for (int count=1; count <= 20; ++count)     {         printf("%d ",rand()%10);         if (count % 5 == 0)             printf(" ");     }     getchar();     return 0; } /* 9 0 6 6 9 6 3 6 1 4 5 1 6 3 4 6 7 6 2 3 */3 在两个任意值之间生成概率较为均等的随机数#include  #include  #include   // Generate a random number between min and max (inclusive) // Assumes srand() has already been called // Assumes max - min <= RAND_MAX int getRandomNumber(int min, int max) // include min and max {     double fraction = 1.0 / (RAND_MAX + 1.0);     return min + (max - min + 1) * (rand() * fraction); } int main() {     srand(time(0));     for(int i=1; i<=20; i++)     {         printf("%d ",getRandomNumber(0,9));         if(i%5==0)             printf(" ");     }     getchar();     return 0; } /* 2 7 5 4 5 9 8 3 6 8 1 2 2 6 9 7 0 1 6 3 */
  为什么我们在上面的函数中使用除法而不是模。简而言之,模方法倾向于偏向于低数值。对于随机数,有一个概率分布问题,如正态分布,随机均匀分布。4 避免同一时间种子产生相同的随机序列#include    //包含伪随机数生成函数 #include      //包含取系统时间的函数 #include  using namespace std; #define kSum 1000  // 均匀分布随机函数均匀化 double _uniform(double min, double max, long int *seed) {     double t = 0;     *seed = 2045 * (*seed) + 1;     *seed = *seed - (*seed / 1048576) * 1048576;     t = (*seed) / 1048576.0;     t = min + (max - min) * t;     return t; }  // 均匀分布随机函数产生随机数 long int Uniform(double min, double max) {     long int s = 0;     double r = 0;      //srand((unsigned int)time(NULL)); /*同一个时间种子可能会从产生相同的随机数列*/     s = rand();     r = _uniform(min, max, &s);      return ((long int)r); }  //算法二 double AverageRandom(double min, double max) {     int minInteger = (int)(min * 10000);     int maxInteger = (int)(max * 10000);     int randInteger = rand() * rand();     int diffInteger = maxInteger - minInteger;     int resultInteger = randInteger % diffInteger + minInteger;      return (resultInteger/10000.0); }  int main() {     int num1, num2, op, result1, result2;     //num1,num2:操作数,op:运算符,result1,result2: 结果     while(1)     {	         srand(time(NULL));  //随机数种子初始化                  //num1=rand() * 10 / (RAND_MAX + 1); // 生成运算数         //num2=rand() * 10 / (RAND_MAX + 1); // 生成运算数         //op=rand() * 4 / (RAND_MAX + 1);         // 生成运算符 0--+, 1-- -, 2--*,3-- /          num1 = Uniform(0,100);         num2 = Uniform(0,100);         op = Uniform(0,4);                  switch (op)         {         case 0: cout << num1 << "+" << num2 << "= ?" ;              cin >> result1;             if (num1 + num2 == result1)                   cout << "you are right ";             else  cout << "you are wrong ";             break;         case 1: cout << num1 << "-" << num2 << "= ?" ;              cin >> result1;             if (num1 - num2 == result1)                  cout << "you are right ";             else  cout << "you are wrong ";             break;         case 2: cout << num1 << "*" << num2 << "= ?" ;              cin >> result1;             if (num1 * num2 == result1)                  cout << "you are right ";             else  cout << "you are wrong ";             break;         case 3: cout << num1 << "/" << num2 << "= ?" ;             cin >> result1;             cout << "余数为 = ?";  cin >> result2;             if  ((num1 / num2 == result1)                  && (num1 % num2 == result2))                 cout << "you are right ";             else  cout << "you are wrong ";             break;         }     }     return 0; }6 随机数应用场景之纸牌游戏之发牌#include #include #include  void initial(int* p)                //初始化一付牌 {     int i;     for(i=0;  i<52;  i++)           //额外增加一个百位来模拟花色         p[i]=(i/13+3)*100+i%13+1;   //301~313,401~413,501~513,601~613 }  void shuffle(int *p)                //洗牌 {     int i,x,y;     int t;     srand((int)time(0));     for(i=0;i<200;i++)              //洗200次     {         x=rand()%52;         y=rand()%52;         if(x!=y)         {             t=p[x];             p[x]=p[y];             p[y]=t;         }     } }  void dealCard(int* p,int* p1,int* p2,int* p3,int* p4)   //发牌 {     int i;     for(i=0;  i<13;  i++)       // 发13轮,每轮每家一张     {         p1[i]=p[4*i];         p2[i]=p[4*i+1];         p3[i]=p[4*i+2];         p4[i]=p[4*i+3];              } }  void sort(int* p)               //排序 {     int i,j;     int t;     for(i=0;  i<13;  i++)         for(j=0;  j<13-i-1;  j++)           {             //if(p[j]>p[j+1])             if(p[j]%100>p[j+1]%100)             {                 t=p[j];                 p[j]=p[j+1];                 p[j+1]=t;             }         } }  void display(int *p) {     int i;     int f,d;     for(i=0;  i<13;  i++)     {         f=p[i]/100;//301~313,401~413,501~513,601~613         d=p[i]%100;//1~13         if(d<10&&d>1)         {             printf("%2c", (d+"0"));         }         else if(d==1)             printf(" A");         else if(d==11)             printf(" J");         else if(d==12)             printf(" Q");         else if(d==13)             printf(" K");         else if(d==10)             printf("10");          switch(f)         {         case 3:             printf("%c ",6); // spades 黑桃             break;         case 4:             printf("%c ",3); // hearts 红桃             break;         case 5:             printf("%c ",5); // clubs 梅花             break;         case 6:             printf("%c ",4); // diams 方块             break;         }     }     printf(" "); }  int main() {     int pai[52],player1[13],player2[13],player3[13],player4[13];     initial(pai);     shuffle(pai);     dealCard(pai,player1,player2,player3,player4);     sort(player1);     sort(player2);     sort(player3);     sort(player4);     printf("黑桃    红桃    梅花   方块 ");     printf("spades  hearts  clubs  diams  ");     printf("随机发牌开始……  ");     printf("East:  ");     display(player1);     printf("South: ");     display(player2);     printf("West:  ");     display(player3);     printf("North: ");     display(player4);     while(1);     return 0; } /* 黑桃    红桃    梅花   方块 spades  hearts  clubs  diams  随机发牌开始……  East:   2   2   2   3   3   5   6   6   9  10  10   J   Q  South:  A   A   3   5   6   7   8   8   9  10  10   J   K  West:   A   3   4   5   6   7   8   9   J   Q   Q   Q   K  North:  A   2   4   4   4   5   7   7   8   9   J   K   K  */
  附,产生n个指定范围内的等概率随机数#include  #include  using namespace std;  // m个指定范围内的等概率随机数 // 从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m void knuth(int n, int m) {      srand((unsigned int)time(0));      for (int i = 0; i < n; i++)          if (rand()%(n-i)
Facebook改名MetaBeatSaberQuest营收破1亿美元(VRPinea10月29日讯)今日重点新闻FacebookConnect2021大会上,Facebook改名Meta,同时Oculus品牌被废弃,并入Meta品牌下BeatSab元宇宙翻红,虚实相通指日可待?(VRPinea11月5日讯)10月29日,Facebook的创始人扎克伯格在今年的开发者大会中正式宣布改公司名为Meta,意为元宇宙的元,表达出对元宇宙的看好,元宇宙的概念就这样35亿定增获通过,斯达半导功率半导体再发力斯达半导发布公告称,2021年9月23日,中国证监会发行审核委员会对公司非公开发行A股股票的申请进行了审核。根据审核结果,公司本次非公开发行A股股票申请获得审核通过。斯达半导202全球首个!矿山领域工业互联网操作系统矿鸿落地众所周知,2019年8月份,华为推出了HarmonyOS(鸿蒙系统)。鸿蒙OS是华为公司开发的一款基于微内核,面向5G物联网全场景的分布式操作系统,由4000多名研发人员耗时10年募资26。75亿元!国博电子科创板IPO获受理,助推射频芯片国产化科创板即将科创板即将迎来有源相控阵雷达组件企业。上交所网站信息显示,南京国博电子股份有限公司科创板申请于9月24日获上交所受理。实控人为中电科据公开资料显示,国博电子成立于2000便携HiFi新体验撸妹简评HIDIZS海帝思S9PRO前言在我印象中,海帝思在前端领域是一个相当活跃的品牌。造前端已经有不短的时间了,而且近期的大尾巴DH80S也深受用户的喜爱。不过作为小型便携解码耳放来说,我更喜欢它家最近新推出的体好听好玩好用DC评OPPOEncoFree2对于HiFi发烧友而言,tws无线降噪耳机同样是我们青睐的产品,因为在拥有它们之前,我总是要在外出时关注有线耳机那根飘荡在外面的线材,复杂的环境噪声也使我难以体验到它们更出色的音质是进化,更是自我超越DC评山灵ME500S在聊山灵这款新品之前,我想先把时钟拨回到10年前。2011年我开始研读博士学位,整日枯坐图书馆埋头苦读。那时,音乐好似枯燥血液之余伴我的一叶孤舟,让我的心灵平静下来,为我的生活增加守望未来,HiFi破圈DC评kineraSKULD曾经的耳机第一品牌德国森海塞尔出售包括令其享誉全球的耳机业务在内的消费电子业务,最近这则劲爆新闻刺激着很多业内人士的神经。专业HiFi耳机还有没有未来?问这个问题也许还不是时候,但百尺竿头,更进一步OPPOEncoFree2如果你要问我国内手机厂商之中哪家在影音领域之中底蕴最深呢?我的答案会是OPPO,这是一家早些年间在蓝光机市场叱诧风云的品牌,出品的蓝光机享誉全球,在那时候说OPPO是蓝光机王者都不动圈,yyds!DC评FAudioDarkSky蓝神圈动圈耳机,作为市面上最为普及的耳机类型,可以说是大家最为熟悉,也是门槛最低的耳机品类了。当然,动圈耳机门槛虽低,它的天花板也很难触及,要想做出听感佳,同时素质高的旗舰动圈耳机并不容
微信推出了iOS版8。0。21内测版微信上线朋友圈转发功能微信ios测试版微信推出了iOS版8。0。21内测版,具体更新内容为支持转发朋友圈内容,以及支持群公告添加图片或文件,并且还有一些细节优化。朋友圈转发功能其中转发朋友圈内容方面,用TikTok跨境电商TikTok跨境业务将在东南亚四国上线Hello,我是贝贝柚,一名资深TikTok运营自媒体人,后期会持续给大家带来各种TikTok玩法变现干货教程,手把手带你玩TikTok。TikTok跨境电商业务即将上线泰国越南马三星GalaxyS22系列微电影温暖上线带你感受手机摄影的无限可能影像是最具生命力的表达方式,它能够最直接地呈现人们的态度和想法,记录真情实感。随着科技的发展,影像的创作方式也更加多元化与个性化,同时我们正处在一个人人都是创作者的新时代,随时随地全国智慧社区AI健身大会28日上线,力盛赛车为主要承办方全国智慧社区AI健身大会28日上线,力盛赛车为主要承办方(文章来源银柿财经)力盛赛车表示,大会目标覆盖200个城市,2万个社区,500万用户。26日,中国体育报发文全民健身线上运动虎牙斗鱼开启裁员行动,游戏直播已成为夕阳行业?文福布斯中国继企鹅电竞退市,虎牙和斗鱼嗅到了游戏直播行业入冬的讯号。近日,虎牙整体大裁员。其中,国际化业务裁员比例高达70,出海产品NimoTV运营团队大收缩国内业务团队裁员20,莉莉丝游戏海外扩张加速,于新加坡成立发行子公司记者彭新编辑中国游戏公司正加速出海。4月25日,莉莉丝游戏宣布,将在新加坡成立发行公司FarlightGames,总部设于新加坡,为莉莉丝游戏的全球发行提供支持和服务。FarligCapitalA创始人兼首席投资玩家超7亿,印度将成为全球游戏强国印度游戏印度游戏市场已经走过了漫长的道路从青少年在游戏厅中花费数小时玩铁拳和超级马里奥的基于硬币的街机游戏,到游戏机,再到现在的游戏应用程序。拥有近4亿游戏玩家的庞大市场规模,以及将油门当刹车,高速4连撞!单踏板模式究竟是不是反人类设计?此前,一位车主在网上爆料,表明自己在机场高速路上正常行驶,但自己所驾驶的特斯拉Model3在毫无征兆的情况下加速到170kmh,随后连撞4辆车,有惊无险,车主性命没有受到伤害,事后手游市场规模单季度破600亿,9项数据读懂Q1游戏产业报告4月24日,伽马数据发布了2022年13月游戏产业报告。报告显示,2022年第一季度,中国游戏产业实际销售收入仍然保持了阶段性的增长。细分来看,移动游戏的收入在整体收入中占76。0iPhone14或迎低价大屏!或引入卫星通讯功能,网友我的iPhone13瞬间不香了中国经济周刊经济网讯彭博社MarkGurman在最新的文章中表示,iPhone14系列非Pro产品线将首次迎来6。7英寸屏幕iPhone14Max。由于用户能比以前少花至少200美史蒂夫乔布斯自闭症谱系上的天才苹果公司创始人史蒂夫乔布斯史蒂夫乔布斯是个天才。天才对我们在这个星球上的生存至关重要。虽然它们总是有点神秘,但我们需要尽可能地理解它们。显然有主要的遗传因素,但也有环境因素。理解乔