分类
Level3

模拟法

在信息学奥赛中,有一类问题是模拟一个游戏的对弈过程,或者模拟一项任务的操作过程,进行统计计分、判断输赢等。这些问题很难建立数学模型用特定算法解决,一般只能采用“模拟”法
所谓模拟法,就是用计算机模拟某个过程,通过改变数学模型的各种参数,进而观察变更这些参数所引起的过程状态的变化,然后从中得出解答
用模拟法解题必须关注以下几个问题:
◆ 审题要仔细,游戏规则不能错
◆ 分析要全面,各种特例不能漏
◆ 编程要细心,测试数据要到位

模拟的步骤:读题-> 建模->代码实现->调试、优化
❶、读懂题目,用纸和笔,针对样例数据,模拟计算一遍,理清各个数据之间的内在逻辑。
❷、建立数学模型。
❸、用计算机模拟出来数据的处理过程。

模拟法一般可以用于解决CSP-J第二轮的第1、2道题目。

实例:用模拟算法来编写一个猜数字游戏。由计算机随机生成一个1~100的整数,然后由用户来猜这个数,根据用户猜测的次数分别给出不同的提示文字。游戏演示过程如下:

#include <time.h>
#include <iostream> 
using namespace std;
int main(){
    int n,m,i=0;
    srand(time(NULL));
    n=rand()%100+1;
    do{
	cout<<"输入猜测的数";
	cin>>m;
	i++;
	if(m>n) cout<<"NO!数太大了" <<endl;
	else if(m<n) cout<<"NO!数太小了"<<endl; 
    }while(m!=n);//没有猜中结果n,则继续
    cout<<"yes"<<endl;
    cout<<"一共猜了"<<i<<"次" ;
    return 0; 
}