码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法之模拟算法 C++实现

时间:2014-11-15 21:54:27      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:数据结构   算法   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 << "您猜的值大了\n";
            cout << "请再次输入猜测的数值:";
            cin >> guess;
        }else if (guess < num){
            count++;
            cout << "您猜的值小了\n";
            cout << "请再次输入猜测的数值:";
            cin >> guess;
        }
    }while(guess != num);
        count++;
        cout << "猜中了!\n";
        cout << "共猜了 " << count << " 次\n";
    return 0;
}
运行结果:
bubuko.com,布布扣
实例二:模拟掷骰子游戏
由用户自己输入参与人数和骰子的个数,然后计算机随机生成每一粒骰子的点数然后统计每个人的点数。

代码:
#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 <<"\n";
    }
    cout << "总共" << m << "点\n";
}
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) << "位选手掷出的骰子情况为:\n";
            play(numbers);
        }
    }while(1);
    return 0;
}
运行结果:
bubuko.com,布布扣

注:

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是整数的范围。

数据结构与算法之模拟算法 C++实现

标签:数据结构   算法   c++   模拟算法   

原文地址:http://blog.csdn.net/guugle2010/article/details/41149455

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!