VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 792|回复: 5

随机函数sand的使用

[复制链接]
62_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-4 22:21:02 | 显示全部楼层 |阅读模式
各位大佬们,上次我也在这发了个求助帖,是问怎么构造一个随机函数,但我今天编完程序发现会有重复(具体看下面)。

我先是取了一个随机函数,然后通过取模得到一个0到47的数。可是我发现因为sand函数太大了,每次除了一个数取模重复的概率太高,所以会重复点到一个人,目前我只想出两个办法:

1.每次点完名重新设置一个种子
2.先把sand函数的数值变小再取模

但这两个办法我都没实现随机函数sand的使用

求助下各位大佬!!!!




上一篇:VC基础班-[27]实现一个简单的任务管理器,课程中还是无法获取全部的进程文件路径是w...
下一篇:为什么cout和endl 是未声明的标识符
62_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-3-4 23:37:00 来自手机 | 显示全部楼层
或者还有其他获取随机值在0~47范围的方法吗?
18_avatar_middle
最佳答案
4 
donate_vip 发表于 2020-3-5 08:57:46 | 显示全部楼层
HTS_Jarvis. 发表于 2020-3-4 23:37
或者还有其他获取随机值在0~47范围的方法吗?
  1. srand(0);
  2. int a[48] = { 0 };
  3. for (int i = 0; i <= 47; i++)
  4. {
  5.         a[i] = rand() % 48;

  6.         //通过与前面的数比较,可避免出现重复
  7.         for (int j = 0; j < i; j++)
  8.         {
  9.                 if (a[i] == a[j])
  10.                 {
  11.                         i--;
  12.                         break;
  13.                 }
  14.         }
  15. }
复制代码


这样行不行?
37_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-5 09:18:10 | 显示全部楼层
我翻了下可以试下两个变小的随机数相除
37_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-5 09:19:25 | 显示全部楼层
像这样:((double)rand()+0.3) / ((double)rand()+1.8)
77_avatar_middle
最佳答案
31 
online_vip 发表于 2020-3-5 09:29:28 | 显示全部楼层
一种是用 rand、srand 来进行随机数的生成,具体见这里:
C/C++中产生随机数(rand,srand用法)
https://www.cctry.com/thread-298461-1-1.html

另外一种可以使用 C++11 的方式来生成随机数:
std::default_random_engine generator(time(0));
std::uniform_int_distribution<int> distribution(1, 100); //1~100之间的随机数
int RandValue = distribution(generator);
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-10 10:03

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表