c++随机数

经常遇到一个c语言的编程游戏出来一个猜数字或者其他什么的游戏需要用到随机数。
但是随机数的来源一般我都是不清楚的,所以今天我去找了些资料,然后自己去编程
一个猜数字的游戏,玩着玩着就感觉不到时间的流逝了。

1. 知识点


c语言系列中是通过使用rand函数来实现随机数的,但是**rand函数**并不是真正的随机数生成器,
他需要通过**srand函数**来提供随机数种子--->以至于被称为是伪随机数。

ps:如果第一次调用rand函数之前没有调用srand函数那么系统自动调用–之后使用相同的数调用的种子用rand函数会导致相同的随机数序列产生。srand(seed),seed意思为种子(返回的随机数在的范围是【0,RAND_MAX】,好像可以设置最小为32,767,最大为2,147,483,647。c用stdlib.h。c++推荐使用cstdlib,细节可以查库函数)
对于上面的seed的测试如下图,当seed一样的时候和不一样的时候出来的值。
测试srand种子

一般情况下,srand函数是使用系统定时/计数器的值作为随机种子,因为时间是一直变化的。

   srand( time(0)); //用时间做种,每次产生随机数不一样
   for (int i=0; i<10; i++)
   {
     int number = rand() % 100 + 1;  //产生1-100的随机数
   }/*但是我注意到的是,%后面那个100是达到最大值,是1-100,改100为N(自己定)就可以为是1-N范围
   的值了,值得注意的是当我想是10-100的时候并不是+10就可以了,我发现竟然随机出来的值可以大于100,
   所以我觉得应该范围是1-N这个范围内*/

[改]然后我现在知道了除%100的100的区间范围的意思,如果只有%100,不加任何值,范围就是【0,99】,+20就是,[20,119].于是下面的1000到9999的随机数可以%9000+1000;

PHP可以更简单的使用rand(min,max)实现;

2.产生随机数的代码块

#include<iostream>
#include<sctdlib>
#include<time.h>
using namespace std;
int main()
{
  int a,int n;
  srand(time(0));
  for(int i=0;i<10;i++)
       n=ran()%100+1;
  cout<<"输出随机值:"<<n<<endl;
  return 0;
}

其中我测试了下time(0),输出这个值,是每秒加一,然后百度了下知道是现在到1970年一月一日0:00的秒的时间数。


3.下面是我当时玩的猜数字( 1000-9999)游戏的代码了。

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
    int  n,m=0;
    float score = 100;
    int Random=20;//定义随机数

    bool f = true;
    srand(time(0));
    char t;
    cout << "你要玩游戏吗?请输入y/n\n";
    while (f)
    {
        cin >> t;
        if (t == 'y' || t == 'Y' || t == 'N' || t == 'n')f = false;
        else cout << "请重新输入"<<endl;

    }
    system("cls");
    while (t == 'y'||t=='Y' )
    {
        int max = 9999, min = 1000;
        while (Random < 1000 || Random>9999)//随机出来的值范围是1到10000,排除掉1000以下的
        {
            for (int i = 0; i < 10; i++)
            {
                Random = rand() % 10000 + 1;//随机数出来,循环十次是因为时间间隔太短
                cout << "第" << i + 1 << "个输出随机数的值:" << Random << "\t\n"; 
            }
        }system("pause");
        cout << "亲,请输入你猜的数字(注意范围在1000到9999):" << endl;
        f = true;
        while (f)
        {
            system("cls");
            cout << "亲,请输入你猜的数字,当前范围是" << min << "到" << max << ":\n";
            cin >> n;
            if (Random > n)
            {
                min = n;
                cout << "你猜的数是:" << n << "。你猜的数小了,请重新输入。";
                m++;
                score = score - score / 10;
            }
            else if (Random < n)
            {
                max = n;
                cout << "你输入的数:" << n << "。你猜的数大了";
                cout << "请重新输入:";
                m++;
                score = score - score / 10;
            }
            else
            {
                m++;
                system("color fc&&cls");
                cout << "===================恭喜你!你猜的数对了=====================" << endl;
                cout << "-------------------你的分数是" << score<<"---------------------"<<endl;
                cout<< "-------------------你猜的次数是:" << m << "---------------------" << endl;
                system("pause");
                f = false;
            }

        }
        system("color 07");
        cout << "你还要继续吗?Y/N" << endl;
        Random = 20;
        cin >> t;
    }
    cout << "谢谢大家的参与:" << endl;
    return 0;
}

我就不贴运行的图了,因为我用了system命令,里面的cls,然后运行到了这里就会清楚之前所输出的那些值,个人因为知道了脚本,cmd命令之后,感觉对cmd命令挺感兴趣的了,只是没时间去统一去学,然后就只知道一些简单的cmd命令,高深一点的bat脚本还没时间去学。

对库函数cstdib的简单了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值