免费注册 查看新帖 |

Chinaunix

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

我也来求一个等概率随机数算法 [复制链接]

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-23 16:29 |只看该作者 |倒序浏览
在0-9之间取随机数100次,要求每个数出现10次。

嗯,就是要求这100个数按顺序来看是随机的,但其分布是固定的。

论坛徽章:
0
2 [报告]
发表于 2010-03-23 17:30 |只看该作者
整数?简单至极!

  1. static char str[]="000000000011111111112222222222....9999999999";

  2. {
  3.    ...
  4.    srand(xxx)
  5.    strfry(str);
  6.    ...

  7.    for (i=0;i<100;++i) {
  8.       putchar(str[i]);
  9.    }
  10.    ...
  11. }
复制代码
哇哈哈哈...

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
3 [报告]
发表于 2010-03-23 17:36 |只看该作者
strfry函数:随机重组一个字符串..
比较汗...

论坛徽章:
0
4 [报告]
发表于 2010-03-23 17:59 |只看该作者
int real_rand(int base)
{
        srand( (unsigned)time(NULL) + rand() );//在种子种再加一个随机数
       
        return rand() % base;               
}

论坛徽章:
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
5 [报告]
发表于 2010-03-23 19:15 |只看该作者
回复 2# JohnBull


    用了这么多年的C/C++,第一次看到这个strfry

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
6 [报告]
发表于 2010-03-23 21:12 |只看该作者
本帖最后由 A.com 于 2010-03-23 21:14 编辑

汗。。。这都行。。。不过我没法用C来实现。。。

那鬼语言的随机数函数诡异至极,必须要给出种子,如果种子不变,那输出铁定是一样的数!!!我试过用10个大素数做种子,结果100次0-9的分布是10,20,20,0,0,20,10,10,10,01000次0-9的分布居然是100,200,200,0,0,200,100,100,100,0

即使加上time做种子,分布规律居然还是没变,连顺序都一致。。。。搞得我一点办法都无

论坛徽章:
0
7 [报告]
发表于 2010-03-23 21:22 |只看该作者
楼主我写了个,你看下是否可用

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5. #include <stdio.h>
  6. #include <time.h>

  7. int main(int argc, char* argv[])
  8. {
  9.         std::vector<int> v;
  10.         for (int i = 0; i <= 9; i++)
  11.                 for (int j = 0; j < 10; j++)
  12.                         v.push_back(i);
  13.         srand((unsigned)time(NULL));
  14.         std::random_shuffle(v.begin(), v.end());
  15.         std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
  16.         return 0;
  17. }
复制代码

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
8 [报告]
发表于 2010-03-23 21:37 |只看该作者
本帖最后由 A.com 于 2010-03-23 21:40 编辑

楼上的方法早就尝试过了,输出连分布都谈不上了,全是0。。。。

PS:大家不要贴代码了,看得累。。。。我没法用c/c++实现,所以说明方法就行一般的产生随机数的办法估计都不行,因为这个输出完全取决于种子,估计要那种很怪异的独辟蹊径的方法才可以

论坛徽章:
0
9 [报告]
发表于 2010-03-23 21:40 |只看该作者
本帖最后由 专操五毛 于 2010-03-23 21:42 编辑

用得啥语言?能详细说下需求吗,我没明白具体要求。
"全是0"是什么意思啊?

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
10 [报告]
发表于 2010-03-23 21:42 |只看该作者
本帖最后由 A.com 于 2010-03-23 21:44 编辑

就是随机出来的数全是0,随机1万次就是1万个0!半个其他数都没有。或者会是1万个4什么的,取决于运行程序的时间,但同一秒内输出必定是相同的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP