| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5034 人关注过本帖
标题:0到100的随机数如何取?
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
0到100的随机数如何取?
要求一般的随机“且不允许重复”数的取法,想了没啥思路,有没有不用库函数就可以实现的简单算法?
搜索更多相关主题的帖子: 算法 如何 
2012-05-09 13:24
明明哥8991
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2012-3-27
收藏
得分:2 
这个很简单嘛,就是有一个专门的函数。是管这个的,
2012-05-09 13:45
马甲1号
Rank: 5Rank: 5
等 级:职业侠客
帖 子:68
专家分:312
注 册:2011-4-4
收藏
得分:2 
不允许重复, 最多取101次喽

程序代码:
#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;

int main(int argc, char* argv[])
{
    vector<int> vec;
    for(int i = 0; i <= 100; ++i)
        vec.push_back(i);
    srand(GetTickCount());

    for(int j = 0; j <= 100; ++j)
    {
        int index = rand() % vec.size();
        vector<int>::iterator iter = vec.begin() + index;
        cout << *iter << " ";
        vec.erase(iter);
    }
    return 0;
}


???????
2012-05-09 13:51
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:2 
https://down.bccn.net/2372.html
书中就随机函数的实现专门有一章讲解的,去看看吧。

我们都在路上。。。。。
2012-05-09 14:20
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:2 
用随机函数MOD上100,再用集合装入。。
2012-05-09 15:25
jackhuang
Rank: 2
等 级:论坛游民
帖 子:16
专家分:52
注 册:2012-3-30
收藏
得分:2 
你要取几个都不注明怎么写啊/ 看看书吧,很简单的哦
2012-05-09 15:29
伤经纪业
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2012-3-25
收藏
得分:2 
有专门的随机函数,应该是random()吧
2012-05-09 16:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
想不用库函数,自己搜索一下“线性同余发生器”吧,库函数似乎也是用这个算法。不用库函数,就要自己写库函数,编程无非是这样二选一而已。

授人以渔,不授人以鱼。
2012-05-09 18:10
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:2 
提供另外一种方法吧,针对“不重复的问题”,可以用随机冲乱的方法

修改 VALUE_SIZE=50 可以达到“从0到100中,随机取50个不重复的数”的目的
HIT_COUNT 越大 随机的效果越好, 过大了也没用

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand((unsigned)time(NULL));

    const int MAX_SIZE = 101;
    const int VALUE_SIZE = 101;
    const int HIT_COUNT = 1000;

    int array[MAX_SIZE] = {0};

    int i=0;
    //init
    for(i=0;i<MAX_SIZE;i++)
    {
        array[i]=i;
    }

    int nHit_Count = 0;
    int index = 0;

    int *pItem = array;
    //hit
    while(nHit_Count<HIT_COUNT)
    {
        index = rand()%MAX_SIZE;
        *pItem         = *pItem^array[index];
        array[index] = *pItem^array[index];
        *pItem         = *pItem^array[index];
        pItem = array+index;
        nHit_Count++;
    }

    //output
    for(i=0;i<VALUE_SIZE;i++)
    {
        printf("%d ",array[i]);
    }

    return 0;
}

为游戏狂~~!!    大家努力编哈!
2012-05-09 20:22
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:2 
rand()
2012-05-12 12:24
快速回复:0到100的随机数如何取?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025661 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved