栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CC++ 生成各位数不相等的随机数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CC++ 生成各位数不相等的随机数

最近想写一个1A2B的小游戏来练习一下,结果在第一步生成随机数的时候就遇到了一点点问题。

游戏初始化时需要先生成一个四位随机数,且各位各不相等。于是最开始的思路是生成一个整数数组,只需要判断生成的随机数字是否跟之前的数字有重复,有则重新生成即可,但是之后发现两个问题。首先是,函数每次调用后生成的随机数是一样的。第二,生成的随机数如果0在第一位,则调用itoa函数时会被舍弃掉。

后来研究中发现,出现的原因是srand放在了函数里,每次调用函数都就重置随机数种子至初始值,于是就会出现生成的随机数都一样的情况。至于第二种错误,可以通过另一种方式来巧妙避免。代码如下,代码中的思路为:

先生成一个0-9的整数数组,再随机从中取一个数,只要不等于-1就将其取出放置到要生成的随机数中,并将该位置为-1。这样做也能提高一点点效率,而不用去删除数组成员。

 1   
 8 void GetRandom(char * random){
 9     int i, j[10], k;
10     for (i = 0; i < 10; i++){
11  j[i] = i;
12     }
13     for(i = 0; i < 4; i++){
14  //生成第i个随机数 
15  k = (int)rand() % 10;//k为下标 
16  while (j[k] == -1){
17      k = (k + 1) % 10; 
18  }
19  random[i] = '0' + j[k];
20  j[k] = -1;
21     }
22 }

真正重要的东西,用眼睛是看不见的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232931.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号