| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3631 人关注过本帖
标题:c语言有不重复随机数函数吗?
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

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


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-30 08:52
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
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[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]

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-30 09:34
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
for(i=0;i&lt;=PrizeCount;i++)

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-30 09:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
自己调试吧,或许有错

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-30 09:36
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.042927 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved