C语言rand()函数产生随机数

#include <stdlib.h>
#include <time.h>
int main() 
{   int i;
    srand((unsigned)time(NULL)); 
    for (i=0;i<10;i++)   printf("%d\n",rand()%6+1);
    return 0; 
} //产生1~6之间的随机数;

运行结果:


根据百度百科,库函数中系统提供了两个函数用于产生随机数:srand()和rand()。 原型为: 
函数一:int rand(void); 
返回一个[0,RAND_MAX]间的随机整数。 
函数二:void srand(unsigned seed); 
参数seed是srand()的种子,用来初始化srand()的起始值。
 
系统在调用rand()之前都会自动调用srand(),如果在srand()里给参数seed指定了一个值(这里指定的值是当前时间),那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,如果初始值是此时的1或是其他定值,那么每次rand()产生的随机数序列都是一样的,这也就是所谓的“伪随机数”。 
值得注意的是,如果srand()括号中没有argument的话,程序是会报错的,因为在函数原型中,srand()函数是要求加上内容的。简而言之,即有如下点:
  1. rand()函数可以生成一个[0,RAND_MAX]间的随机整数;(ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。)
  2. srand()可以被认为是为rand()的“伪随机数”的结果指定一个固定的序列,若未引用srand()函数,则程序默认srand()括号中的值为1;如果引用的话,srand()括号中不能为空;
  3. 为了确保生成的随机数为尽可能符合概率上的随机,需要调用一个函数time()(是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型),这个函数包含在头文件time.h里,在生成随机数的调用下需强制类型转换为(unsigned)time(),后面一个括号中必须填入(unsigned)time(NULL)或(unsigned)time(0)。
  4. 如果你要求产生的随机数在某一范围X~Y之内的话,只需要做如下处理即可:rand()%(X-Y+1)+X;
    再来举一个例子吧:


    死亡的 cyk

    Time Limit: 1000 ms  Memory Limit: 65536 KiB

    Special Judge

    Problem Description

    复仇者联盟没有能够阻止灭霸那个毁灭一半生命的响指,宇宙中一半的生命就此消失。有一个遥远的星球: cyk 星,也不可避免的死亡了一半的 cyk 。

    cyk 星上一共有 6 个 cyk 
    - cyk0
    - cyk1
    - cyk2
    - cyk3
    - cyk4
    - cyk5

    受到灭霸响指的影响,死去了 3 个 cyk ,现在请你给出死去的这 3 个 cyk 的名字。

    Input

    没有输入。

    Output

    每行一个,输出死去的 cyk 的名字,顺序不限。

    Sample Input

     
       

    Sample Output

    cyk0
    cyk1
    cyk2

    Hint


    注意:每次提交题目都对应一个新的平行世界,因此死亡的 cyk 与其他世界的可能不同,但一定是 3 个(这句话的意思就是一次提交代码能不能AC完全看你个人运气,但如果你代码没问题,那你早晚会AC,时间问题。本人提交10次AC)

    Source

    MeiK
    代码如下:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main()
    {
        srand((unsigned)time(NULL));
        int i,k[100],j,flag=1;
        for(i=0; i<3; i++)
            k[i]=rand()%6+0;
        while(flag)
        { flag=0;
            for(i=0; i<3; i++)
                for(j=i+1; j<3; j++)
                {
                    if(k[j]==k[i])
                       {
                        k[j]=rand()%6+0;
                        flag=1;
                       }
                }
        }
        for(i=0; i<3; i++)
        {
            if(i==2)
                printf("cyk%d",k[i]);
            else
                printf("cyk%d\n",k[i]);
        }
    }
    


猜你喜欢

转载自blog.csdn.net/z_xindong/article/details/80643604