| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 718 人关注过本帖
标题:关于随机函数的问题
只看楼主 加入收藏
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
结帖率:78.57%
收藏
已结贴  问题点数:20 回复次数:12 
关于随机函数的问题
如何产生随机数但是不重复呢?作为一个子函数要调用,要能返回随机数。
搜索更多相关主题的帖子: 如何 
2012-11-21 22:44
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
int intest()              
{
  srand( (unsigned)time(NULL) );
   return (rand() %num);
}
这个老有重复的,求指教。
2012-11-21 22:47
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:10 
亲,这是我给你百度的。
最好是先想,再百度,再问。。

#include<stdio.h> #include<stdlib.h> #include<time.h> void main() { int x;  int num[10];//声明数组。  srand(unsigned(time(NULL)));  for(int i=0;i<6;i++)  {//取6个不重复的整数放到数组num中。 leap:x=rand()%10; //此处我将其改为0-9范围了。你可以改大。  for(int j=0;j<i;j++)//用j<i来作循环条件,因为当i=0时,就可直接插入了;且此时下一个值还未插入。比如:i=4时,实际上,num中只有num[0].num[1]num[2]num[3]四个元素。

WE GO
2012-11-21 22:55
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
我的意思是你能百度的就别在这发帖了

WE GO
2012-11-21 22:56
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:5 
那就在函数返回后处理啊
比如
int i=0,j=0,num[1000];
num[0]=intest();
for(i=1;i<1000;i++)
{
    num[i]=intest();
    for(j=0;j<i;j++)
    if(num[j]==num[i])
    {
        i--;
        break;
    }
}

小小战士,战士中的战斗机!
2012-11-21 23:10
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 3楼 cyhdahua
没看懂,而且不要用数组,我是一个一个值返回的。
2012-11-22 12:48
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
sorry!我没看仔细你的题意!!
我先说说你的问题之所在就是
1.每次都要根据系统时钟生成rand()随机序列种子。
2.rand()函数返回一个伪随机整数。
3.计算机运行很快,每次调用系统时钟还没有改变。
建议:
程序代码:
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#define num 100
int intest()             
{
   return (rand() %num);
}

int main(){
    srand( (unsigned)time(NULL) );
    for(int i=100;--i;printf("%d\n",intest()));
    return 0;
}

WE GO
2012-11-22 20:19
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 7楼 cyhdahua
我表示有一个错误,而且不是我想要的答案,我想要的是产生不重复的随机函数的子函数,可以被其他函数调用的。
2012-11-22 21:47
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
爱莫能助啊

WE GO
2012-11-22 22:15
hfhf2006
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:169
注 册:2012-6-29
收藏
得分:5 
回楼主,看我的对不,我在我的博客上写过这样的函数,http://cn123.
程序代码:
/*
  函数功能:产生无重复随即数
  int a[]  保存随即数数组
  int num  数组大小
  int max  随机数上限
  int min  随即数下线
  马甲:萝卜头
  QQ:32493835
*/
void norand(int a[],int num,int max,int mim)
{
  int i,j,temp;
  randomize();
  a[0]=rand()%(max+1-mim)+mim;
  for(i=1;i<num;)
   {
      temp = rand()%(max+1-mim)+mim;
      for(j=0;j<i;j++)
        {
          if(temp==a[j])
         break;
        }
      if(j>=i)
        {
         a[i]=temp;
          i++;
        }

    }
}


[ 本帖最后由 hfhf2006 于 2012-11-22 22:16 编辑 ]
2012-11-22 22:15
快速回复:关于随机函数的问题
数据加载中...
 
   



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

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