版块导航
正在加载中...
客户端APP下载
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(4486)
>
虫友互识
(288)
>
文献求助
(213)
>
导师招生
(117)
>
招聘信息布告栏
(111)
>
论文投稿
(106)
>
考博
(77)
>
休闲灌水
(67)
>
学术会议
(62)
>
硕博家园
(43)
>
教师之家
(42)
>
博后之家
(41)
>
找工作
(38)
>
基金申请
(35)
>
考研
(34)
>
公派出国
(32)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
C/C++
»
【求助】用rand命令怎么产生各占一半的两个随机点
5
1/1
返回列表
查看: 1672 | 回复: 8
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖
shugq_2009
新虫
(小有名气)
应助: 0
(幼儿园)
金币: 17.2
帖子: 66
在线: 54.5小时
虫号: 822406
[交流]
【求助】用rand命令怎么产生各占一半的两个随机点
我现在想用rand命令产生各占一半的1和2两个随机数,我不知道用什么命令实现各占一半,望赐教,谢谢。下面是我产生1和2两个随机数的程序
srand((int)time(0));
for(int i=0;i<10;i++)
{
printf("%d\n",1+rand()%2);
}
return(0);
}
回复此楼
» 猜你喜欢
OpenAI又攻克数学难题了,离AI做有机合成还有多远?
已经有6人回复
售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急
已经有10人回复
售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急
已经有9人回复
售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急
已经有8人回复
售SCI文章,我:8O.5.5.1O.54,科目全,可十急
已经有7人回复
售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急
已经有9人回复
售SCI文章,我:8O.5.5.1O.54,科目全,可十急
已经有8人回复
售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急
已经有8人回复
售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急
已经有7人回复
售一区SCI文章T0P,我:8O.551.O54,科目全,可十急
已经有8人回复
高级回复
» 本主题相关价值贴推荐,对您同样有帮助:
fortran中到底该如何比较两个实数是否相等
已经有8人回复
请问这两种物质是什么?
已经有5人回复
专家帮看看JAPS里要求指定两个preferred reviewer怎么搞啊
已经有9人回复
如何让一个两次让我去面试由于特殊情况我都没去的公司再给我一次面试机会?
已经有7人回复
磷酸盐和氯化钙配制培养基产生沉淀是怎么回事啊
已经有12人回复
两难的选择!博后或工作,请各位支招!
已经有9人回复
投稿遇到问题,不小心提交了两遍,该怎么办呢?
已经有11人回复
液相一个峰,正相板点板两个峰,怎么回事?
已经有20人回复
请问给老外发信yahoo邮箱怎么样
已经有9人回复
使用counterpoise命令,出现警告
已经有7人回复
大修之后还有两个审稿人认为语言不行,该怎么办呢
已经有13人回复
随便一种有机物怎么确认啊?
已经有13人回复
【建议】两人一个国内,一个国外,将来在一块的几率大吗?
已经有62人回复
【求助】恒电位电解电流很小怎么办啊
已经有14人回复
1楼
2010-12-08 13:52:08
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
帖子: 699
在线: 102.6小时
虫号: 913482
CODE:
#include
#include
#include
int getrand(int* a, int n)
{
int b[50];
int c = 0;
int idx = 0;
memset(b, 0, 50*sizeof(int));
srand(time(0));
for(int i = 0; i < 50; i++)
{
b[i]=(int)(rand() % 2) + 1;
}
for(int i = 0; i < 50 - n; i++)
{
c = 0;
for(int j = i; j < i + n; j++)
{
if(b[j] == 1)
c++;
}
if(c == 5)
{
idx = i;
break;
}
}
memcpy(a, b+idx, n*sizeof(int));
return idx;
}
对代码进行1千万次调用,耗时30秒,idx的期望大约在4~8这个范围。
赞
一下
回复此楼
高级回复
8楼
2010-12-14 12:57:20
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
查看全部 9 个回答
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
帖子: 699
在线: 102.6小时
虫号: 913482
★ ★
余泽成(金币+2):辛苦辛苦! 2010-12-12 20:59:52
恩,烧死100个脑细胞后,想到一个方法,不过效率不高。
因为rand近似是均匀分布的, 所以你如果需要10个1、2的均匀分布且各占一半的话,不如产生20个,然后从左到右数十个数,计算一下是不是各5个,如果不是,就换下一组。如果满足就返回。如果都不满足,就重新再生成一次。
赞
一下
(1人)
回复此楼
2楼
2010-12-09 18:50:09
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
tjyl
金虫
(正式写手)
程序强帖: 2
应助: 0
(幼儿园)
金币: 3218.1
帖子: 576
在线: 156.6小时
虫号: 765184
★ ★
余泽成(金币+2):谢谢应助! 2010-12-12 21:01:42
我觉得直接LZ那样就行了,从概率上说1+rand()%2的可能只有1,2,其概率都是0.5.
各占一半是从概率上说的,并不是说100个数里面两个数一定得各50个。个人理解,呵呵。
int rand_two(void)
{
return 1+rand()%2;
}
引用回帖:
Originally posted by
holmescn
at 2010-12-09 18:50:09:
恩,烧死100个脑细胞后,想到一个方法,不过效率不高。
因为rand近似是均匀分布的, 所以你如果需要10个1、2的均匀分布且各占一半的话,不如产生20个,然后从左到右数十个数,计算一下是不是各5个,如果不是,就 ...
赞
一下
(1人)
回复此楼
3楼
2010-12-11 23:24:33
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
帖子: 699
在线: 102.6小时
虫号: 913482
★
余泽成(金币+1):鼓励讨论! 2010-12-12 21:02:00
引用回帖:
Originally posted by
tjyl
at 2010-12-11 23:24:33:
我觉得直接LZ那样就行了,从概率上说1+rand()%2的可能只有1,2,其概率都是0.5.
各占一半是从概率上说的,并不是说100个数里面两个数一定得各50个。个人理解,呵呵。
int rand_two(void)
{
return 1+r ...
我觉得是你没理解LZ的意思(要不就是我没理解对)
LZ想要一组数, 1 和2在里面均匀分布,且个数正好是各占一半。
虽然LZ的算法在理论上成立,但不能满足各占一半这个要求。
所以我认为我的算法,虽然效率不高,但能够满足这两点要求。
赞
一下
(1人)
回复此楼
4楼
2010-12-12 12:30:04
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
查看全部 9 个回答
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定