请问,怎样产生随机数?????
int second=0,i,j;
int random()
{ unsigned d;
int r,s;
long *p;
p=(long*)malloc(4);
time(p);
d=((unsigned)*p)+second;
second++;
srand(d);
for(s=0;s<=48||s>=57;) //0--9
{r=rand();
s=r%58+1;}
free(*p);
return s;
}
creat(char array[5])
{ for(i=0;i<5;i++)
array[i]=random();
for(i=0;i<5;i++)
{ for(j=i+1;j<5;j++)
{ if((array[i]-array[j])==0) {creat(array);}
}
}
}
以上的creat()函数是用来随机产生5个数,不重复(0--9),初学编程,请各位指点指点,是否可以改进?不用time()做种子,还可以用什么?
问题点数:50、回复次数:9Top
1 楼quieter(believe in professional)回复于 2003-12-01 15:58:07 得分 10
呵呵,女孩子,有前途!Top
2 楼bohut(●伯虎● )回复于 2003-12-01 15:58:29 得分 10
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i;
/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );
/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}
Top
3 楼ericzhangali(另一个空间)回复于 2003-12-01 16:25:23 得分 10
在FAQ里搜一下,这些帖子也许对你有帮助。
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=218
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=944
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=174676
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=171425
Top
4 楼imlovinit(婷婷)回复于 2003-12-01 16:53:53 得分 0
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main()
{ int x,y;
char array[5];
srand( (unsigned)time( NULL ) );
for(x=0;x<5;x++)
for(y=0;y<=48||y>=57;)
{ y=rand(); array[i]=y;}
for(i=0;i<5;i++)
printf("%c",array[i]);
printf("\n");
用以上程序产生的随机数是有重复的,如果想得到没有得复的数,该如何做?Top
5 楼lazygod(Use any item)回复于 2003-12-01 17:41:53 得分 10
int i, j, num[5];
srand((unsigned)time(NULL));
for( i = 0; i < 5; i ++)
{
num[i] = rand()%10;
j = 0;
while(j < i)
{
if(num[i] == num[j])
{
printf("%d,", num[i]);
num[i] = (num[i] + rand())%10;
j = 0;
}
else
j ++;
}
printf("%d\n", num[i]);
}
用Time做种子,仍可能会产生大量相同的数(比如TC)。以上办法可以解决这个
任何不固定正在动的都是好种子Top
6 楼TianGuangZao(天光早)回复于 2003-12-01 19:49:39 得分 0
没有重复的数就不叫随机数了。Top
7 楼haowh(一个人走在黑黑的夜)回复于 2003-12-01 20:45:41 得分 0
真正好的随机数根本不用rand ,一般都采用一些很复杂的算法来产生一个种子,然后在对种子
进行一般非常人想象得操作。当然一般用的很多的是 异或当前的进程和系统当前的时间,然后放到一个一个随机pool中,然后再对这个随机pool 进行散列。 真晕,以前作过一个真麻烦,而且没法获得真正随机的种子。Top
8 楼TianGuangZao(天光早)回复于 2003-12-01 21:13:47 得分 0
好想知道你是如何证明你编的随机数算法优于 rand。Top
9 楼caohoujie()回复于 2003-12-01 22:25:11 得分 10
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void CreateRand(unsigned *a,unsigned *b,unsigned n,unsigned m)
{
unsigned l=0,temp=n;
srand((unsigned)time(NULL));
while(l<m)
{
for(int i=temp;i<n;i++)
a[i]=a[i+1];
temp=rand()%n--;
b[l++]=a[temp];
}
}
void PrintArray(unsigned *ar,unsigned l)
{
for(int i=0;i<l;i++) cout<<ar[i]<<' ';
cout<<endl;
}
void main()
{
unsigned m=7,n=36;
unsigned *a=new unsigned[n];
unsigned *b=new unsigned[m];
for(int i=0;i<n;a[i++]=i+1);
CreateRand(a,b,n,m);
PrintArray(b,m);
delete []a;
delete []b;
}
36选7大家拿去摸彩票Top




