一个很简单的小问题。恳请各位大哥指点

duliang135 2012-09-26 05:01:28
我想知道。。比如求一个5~10伪随机整数的时候,要用5+rand()%6 这里有一个余数算法。
再比如rand()%11是求0~10之间。
我想知道%的准确用法。不知道为什么是%6和%11.求大侠们解释一下。有时候做题会碰到%1000啦%100啦。我知道是余数运算。但是假如拿出一个区间,5~15.这些问题怎么知道%号后面的数字跟多少。。
...全文
161 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndyZhang 2012-09-28
  • 打赏
  • 举报
回复
[m ,n]实际上就是m+[0, n-m],然后在rand[0 ,n-m]这个就简单了吧
martin_kingno1 2012-09-27
  • 打赏
  • 举报
回复
貌似2楼正解哈……
fthyc 2012-09-27
  • 打赏
  • 举报
回复
2楼正解
左眼看到鬼 2012-09-27
  • 打赏
  • 举报
回复
楼上几位说的不错,顺便学习
longshaooo7 2012-09-27
  • 打赏
  • 举报
回复
要想取得[a,b)之间的随机整数,使用(rand()%(b-a))+ a,结果包含 a 而不含 b.
smart900613 2012-09-27
  • 打赏
  • 举报
回复
一步步来, 如果是5 - 15, 取最后一位 + 1 rand() %16 但是随机数是从0开始的,所以要+ 5

结果 5 + rand() % 16
xiaoxiao8310 2012-09-27
  • 打赏
  • 举报
回复
rand()%n的结果 >=0 且 <=n-1
L_chxu 2012-09-26
  • 打赏
  • 举报
回复
%数后面的那个数的值为间距,+后面的值表示起始值
如:
rand()%m+1
就是产生1—m之间的伪随机数
ouPuso 2012-09-26
  • 打赏
  • 举报
回复
%就是小学的时候学的除法,取的是余数,如:8%3==2...2, 6%5==1...1, 9%4==2...1
5~10 等同于(0~5)+5, 所以可以用 (n%6)+5, 余数范围是0~5.
5~15 等同于(0~10)+5, 所以可以用 (n%11)+5, 余数范围是0~10.

负数%正数、负数%负数、正数%负数 的情况存在着歧义, 可以用不同的编译测一下,一般也只能满足除法的两条规则.
图灵狗 2012-09-26
  • 打赏
  • 举报
回复
%后面的数字是随机范围,比如a~b的话,那么应该是%(b - a + 1)。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧