生成随机数

原理

#include<iostream>
#include<cstdio>
#include<cstdlib>/* srand, rand */
using namespace std;
int main(){
    cout<<rand()<<endl;//在[0,RAND_MAX]生成一个随机数
    return 0;
}
//重复运行程序,随机数不变。
//这是因为在电脑上的随机函数生成都是伪随机数
//rand()函数按照约定从一个seed(种子)开始向后生成随机数
//所以如果seed不变,那么生成的随机数也不变

改进

#include<iostream>
#include<cstdio>
#include<cstdlib>/* srand, rand */
#include <time.h>       /* time */
using namespace std;
int main(){
    srand((int)time(0));//重载随机数种子,参数是cpu当前时间
    cout<<rand()<<endl;
    return 0;
}
//由于时间总是在变化,所以程序每次的随机数种子都不一样,这样生成的随机数也就不同。

完善

void Randomize(){//重置随机说种子
    srand((int)time(NULL));
}
int GenerateRandNum(int low,int high){//在[low,high]之间生成一个随机整数
    if(low>high){
        cout<<"make sure low<=high"<<endl;
        exit(1);
    }
    //得到一个[0,RAND_MAX]的一个比例
    double x=(double)rand() /((double)RAND_MAX+1.0);
    //再将这个比例映射到我们所需要的区间上,即[low,high]
    return (low+(int)(x*(high-low+1)));
}
double GenerateRandRel(double low,double high){//在[low,high]之间生成一个随机实数
    if(low>high)
    {
        cout<<"make sure low<=high"<<endl;
        exit(1);
    }
    double x=(double) rand() /(double)RAND_MAX;
    return low+(double)x*(high-low);
}
int main() //test.main()
{
    Randomize();
    cout<<GenerateRandNum(0, 52)<<endl;
    cout<<GenerateRandRel(0,1.0)<<endl;
    return 0;
}

这是一个cpluscplus上的例子

/* rand example: guess the number */
#include <stdio.h>      /* printf, scanf, puts, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

int main ()
{
  int iSecret, iGuess;

  /* initialize random seed: */
  srand (time(NULL));

  /* generate secret number between 1 and 10: */
  iSecret = rand() % 10 + 1;

  do {
    printf ("Guess the number (1 to 10): ");
    scanf ("%d",&iGuess);
    if (iSecret<iGuess) puts ("The secret number is lower");
    else if (iSecret>iGuess) puts ("The secret number is higher");
  } while (iSecret!=iGuess);

  puts ("Congratulations!");
  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值