| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3629 人关注过本帖
标题:c语言有不重复随机数函数吗?
取消只看楼主 加入收藏
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
 问题点数:0 回复次数:7 
c语言有不重复随机数函数吗?
比如:单位开奖都要求这个函数,不知道怎么写?刚学,请老师们大量。
搜索更多相关主题的帖子: 随机数 c语言 函数 
2007-08-29 14:25
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 
谢谢老师们。我试试。再回话。
2007-08-29 16:23
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 

想了很久,还是加了一个goto语句,数字好象不重复了,请老师们纠正!

#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "string.h"
#define N 20 //设置奖品个数;
#define M 500 //参加抽奖人数;
int main()
{
int i,s,k=0,a[N];
printf("本次设置奖品数%d个;\n",N);
printf("本次参加抽奖人数%d人;\n",M);
getchar();
srand(time(NULL));
for(k=0;k<N;k++)
ch:
{i=rand()%M;
{for(s=0;s<k;s++)
if(i==a[s]) goto ch;
a[k]=i;}
printf("%d\t",a[k]);}
}

2007-08-30 08:46
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 
以下是引用Knocker在2007-8-30 8:52:55的发言:

是作业吧?我看你没有编程基础,至少是没有C语言的基础

不是作业,只是爱好;

您说对了。我是没有基础的,没有系统性的,所以,在此请您帮助。

老师能更改一下吗?

[此贴子已经被作者于2007-8-30 9:06:12编辑过]

2007-08-30 09:03
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 
以下是引用Knocker在2007-8-30 9:36:53的发言:
自己调试吧,或许有错

非常感谢您的帮助。我先学习一下。

2007-08-30 10:17
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 
以下是引用Knocker在2007-8-30 9:34:11的发言:
[CODE]

#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "string.h"
#define N 20 //设置奖品个数;
#define M 500 //参加抽奖人数;

int MyRand(int *PrizeNumber,int PrizeCount);
int main()
{

int PrizeNumber[N];
int PrizeCount=-1,k;

int AllNumber[M];
int tmp1,tmp2,tmpPrize;

printf("本次设置奖品数%d个;\n",N);
printf("本次参加抽奖人数%d人;\n",M);
getchar();

printf("方法一!\n");
srand(time(NULL));
for(k=0;k<N;k++)
{
if( (PrizeCount=MyRand(PrizeNumber,PrizeCount))==-1)
{
printf("错误!\n");
getch();
return 1;
}
}
for(k=0;k<N;k++)
{
printf("%d\t",PrizeNumber[k]);
}
getch();


printf("方法二!\n");
for(k=0;k<M;k++)
{
AllNumber[k]=k+1;
}
for(k=0;k<M*2;k++)
{
tmp1=rand()%M;
tmp2=rand()%M;
tmpPrize=AllNumber[tmp1];
AllNumber[tmp1]=AllNumber[tmp2];
AllNumber[tmp2]=tmpPrize;
}

for(k=0;k<N;k++)
{
printf("%d\t",AllNumber[k]);
}
getch();
return 0;
}
int MyRand(int *PrizeNumber,int PrizeCount)
{
int Prize=rand()%M;
int i;
int flag = 0;
if(PrizeCount>N)return -1;
for(i=0;i<PrizeCount;i++)
{

if(Prize == PrizeNumber[i])
{
flag=1;
break;
}
}

if(flag)
{
MyRand(PrizeNumber,PrizeCount);
}
else
{
PrizeNumber[++PrizeCount]=Prize;
return PrizeCount;
}

}

[/CODE]

老师我看完了,收益颇丰,知道函数的好处了。但不会改您的程序。有几个小问题,我不知道怎么修改?

方法一:有重复的。我的测试方法,N=M=5,数据应该不重复为0,1,2,3,4。只是次序的变化。

方法二:没有重复。但没有包括0。

再次的表示衷心的感谢。

2007-08-30 14:01
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 

我把程序删了,不问了。

[此贴子已经被作者于2007-9-5 10:08:07编辑过]

2007-09-04 12:06
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
收藏
得分:0 

我把程序删了,再也不问了。

太郁闷了???

[此贴子已经被作者于2007-9-5 10:09:03编辑过]

2007-09-05 08:06
快速回复:c语言有不重复随机数函数吗?
数据加载中...
 
   



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

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