zoukankan      html  css  js  c++  java
  • 仿真算法数据结构与算法 C++实现

    模拟算法:仿真的全过程,通过改变数学模型参数,进一步观察状态更改这些参数发生变化正当程序。


    算法思路:利用随机函数来模拟不可预测发生在自然界。(srand() 和 rand()函数生成一个随机数)

    模拟算法也就是将整个过程完完整整的走一遍。题目怎么叙述的,程序就怎么执行。

    实例一:猜数字
    计算机随机生成一个1-100的整数,用户推測,每次推測给出不同的提示。
    代码:
    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    int main()
    {
        srand(time(NULL));
        int count=0;
        int num = rand()%100 + 1;
        int guess;
        cout << "请输入推測的数值:";
        cin >> guess;
        do{
            if (guess > num){
                count++;
                cout << "您猜的值大了
    ";
                cout << "请再次输入推測的数值:";
                cin >> guess;
            }else if (guess < num){
                count++;
                cout << "您猜的值小了
    ";
                cout << "请再次输入推測的数值:";
                cin >> guess;
            }
        }while(guess != num);
            count++;
            cout << "猜中了!

    "; cout << "共猜了 " << count << " 次 "; return 0; }

    执行结果:

    实例二:模拟掷骰子游戏
    由用户自己输入參与人数和骰子的个数。然后计算机随机生成每一粒骰子的点数然后统计每一个人的点数。

    代码:
    #include<iostream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    void play(int n);
    void play(int n)
    {
        int i,m=0,t=0;
        for(i=0; i<n; i++)
        {
            t=rand()%6+1;
            m+=t;
            cout << "第" << (i+1) << "粒骰子的点数为:" << t <<"
    ";
        }
        cout << "总共" << m << "点
    ";
    }
    int main()
    {
        int people,numbers;
        do{
            srand(time(NULL));
            cout << "请输入參与的人数:";
            cin >> people;
            if(people == 0) break;
            cout << "请输入骰子的数量:";
            cin >> numbers;
            if(numbers == 0) break;
            for(int i=0; i<people; i++)
            {
                cout << "第 " << (i+1) << "位选手掷出的骰子情况为:
    ";
                play(numbers);
            }
        }while(1);
        return 0;
    }
    执行结果:


    注:

    C++产生随机数的使用方法

    1) 给srand()提供一个种子,它是一个unsigned int类型。

    2) 调用rand(),它会依据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);

    3) 依据须要多次调用rand()。从而不间断地得到新的随机数;

    4) 不管什么时候。都能够给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

    产生一定范围随机数的通用表示公式

    要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;

    要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;

    要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;

    通用公式:a + rand() % n。其中a开始值,n范围是一个整数。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    木马后门入侵与RKHunter,ClamAV检测工具
    Jenkins环境搭建
    Mha-Atlas-MySQL高可用
    JAVA企业级应用服务器之TOMCAT实战
    Keepalived高可用集群
    scp ssh-key连接原理
    jumpserver跳板机搭建
    DNS域名解析服务器
    DHCP服务
    Keepalived高可用集群
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4645510.html
Copyright © 2011-2022 走看看