免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3771 | 回复: 9
打印 上一主题 下一主题

[C] rand()%6+1 总是产生22345,没有1。。怎么回事??请教。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-17 14:22 |只看该作者 |倒序浏览
rand()%5+1  总是产生22345,没有1。。怎么回事??请教。。
我想要生成 1-5的随机数。。。
for(i=0;i<5;i++)
        {
                id=rand()%6+1;
                printf("id is %d\n",id);
        }

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-06-17 14:36 |只看该作者
生成N个就想得到不重复的N个数字?这个可以用一个长度N的数组,填充1~N,然后用rand生成的随机值做下标进行交换数组项

论坛徽章:
0
3 [报告]
发表于 2009-06-17 14:37 |只看该作者
随即啊,可能就没有

论坛徽章:
0
4 [报告]
发表于 2009-06-17 14:49 |只看该作者
原帖由 hellioncu 于 2009-6-17 14:36 发表
生成N个就想得到不重复的N个数字?这个可以用一个长度N的数组,填充1~N,然后用rand生成的随机值做下标进行交换数组项


随机值做下标。。。大概懂。。

交换数组项是什么意思?好复杂。。

原来rand()没有想象的强大么。。

论坛徽章:
0
5 [报告]
发表于 2009-06-17 14:54 |只看该作者
我把问题想简单些。。。
只要生成5个不同的数。不重复就好。。。

我不太明白rand()产生随机数的原理。。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2009-06-17 14:58 |只看该作者
随便写了下
#define N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5
&nbsp;&nbsp;&nbsp;&nbsp;int id[N];
&nbsp;&nbsp;&nbsp;&nbsp;int i, j, k;
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < N; i ++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id[i] = i + 1;

&nbsp;&nbsp;&nbsp;&nbsp;srand((unsigned)time(NULL));
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < N; i ++)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = rand() % N;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = id[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id[0] = id[j];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id[j] = k;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < N; i ++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%dn", id[i]);


[ 本帖最后由 hellioncu 于 2009-6-17 15:00 编辑 ]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2009-06-17 15:01 |只看该作者
奇怪,printf("%d\n"怎么变成了printf("%dn"?

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
8 [报告]
发表于 2009-06-17 15:02 |只看该作者
The  srand()  function  sets  its  argument  as  the seed for a new sequence of pseudo-random integers to be returned by rand().  These
       sequences are repeatable by calling srand() with the same seed value.

没用过这个,man里,应该这个意思:种子不变,随即序列不变。

论坛徽章:
0
9 [报告]
发表于 2009-06-17 16:52 |只看该作者
原帖由 hellioncu 于 2009-6-17 14:58 发表
随便写了下
#define N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5
&nbsp;&nbsp;&nbsp;&nbsp;int id[N];
&nbsp;&nbsp;&nbsp;&nbsp;int i, j, k;
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < N; i ++)
...


有点绕么。。有费解。。
我试试先。。多谢多谢。。

论坛徽章:
0
10 [报告]
发表于 2009-06-17 20:16 |只看该作者
要先调用srand设置种子
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP