前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C\C++ 生成各位数不相等的随机数

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

作者头像
弗兰克的猫
发布2018-01-09 14:57:11
1.5K0
发布2018-01-09 14:57:11
举报
文章被收录于专栏:Java爬坑系列Java爬坑系列

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

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

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

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

代码语言:javascript
复制
 1 /****************************************************************************** 
 2 *函数名称:void GetRandom(char * random)
 3 *函数功能:产生一个各位数不相等的四位随机数 
 4 *入口参数:random为返回的随机数 
 5 *返 回 值:无 
 6 *备 注:先生成一个0-9的整数数组,再随机从中取四个数,每取一个将该位置为-1 
 7 *******************************************************************************/  
 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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档