C语言
一.函数
1:int rand(void)
该函数会产生一个[0,RAND_MAX]的伪随机数,那什么是伪随机数?
相当于一个序列a1-an,第一次使用会返回a1, 第二次使用会返回a2….第n次返回an,这样每次调用rand()都能产生一个不同的数,只要整个序列的规律不明显,整个函数看起来就是随机的。
而这个序列是计算机通过调用srand((int)time(NULL))函数随机产生的。
2:void srand(unsigned seed)
srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数序列,所以,在相同的平台环境下,不同时间产生的随机数会是不同的。如果该函数的参数是一个常数,那么每次生成的随机数序列都是固定的。
二.函数使用
1.标准使用:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main(void)
{
srand((int)time(NULL));
printf("%d\n",RAND_MAX);
for(int i = 0; i<5; i++)
{
printf("%d\n",rand());
}
return 0;
}
结果:
2:如果你想产生在[0, 32767]范围内的一个范围的随机数,可以这样:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main(void)
{
int n;
srand((int)time(NULL));
printf("你想生成随机数的最大值是多少?\n");
scanf("%d",&n);
for(int i = 0; i<5; i++)
{
printf("%d\n",rand()%n);
}
return 0;
}
结果:
3.如果你还不满足n的范围,可以这样(缺点:n太大精度不好):
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main(void)
{
int n;
srand((int)time(NULL));
printf("你想生成随机数的最大值是多少?\n");
scanf("%d",&n);
for(int i = 0; i<5; i++)
{
double t =(double)rand()/32767;//产生一个[0,1]内的随机数
double c = t*n;//将他变成你想要的范围
printf("%d\n",(int)c);
}
return 0;
}
结果:
三.注意:
1.srand()函数是用来初始化随机数种子的,种子决定序列,种子相同,序列也就相同,每次产生的随机数也就相同,而且srand()只需要执行一次,不要在程序中多次使用它,防止产生相同的随机数。
2.关于time_t time(0):time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。
3.如果在程序中没有使用srand()函数,那么系统会默认给种子初始为0,所以每次产生的随机数序列都是一样的,这个要注意。
Java
一:函数
1.Math.random()
该函数会默认生成[0,1)内的随机数,注意1不闭合。所以你要产生某一范围内的随机数就要最后加上1.
二:函数的使用
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("你想要的范围最大数:");
java.util.Scanner input = new java.util.Scanner(System.in);
double n= input.nextDouble();
for(int i = 0; i<5; i++)
{
System.out.println(Math.random()*n+1);
}
}
}
结果:
3.java很方便吧