模拟题

模拟。顾名思义,就是用计算机来模拟题目中要求的操作,比如 NOIP 2014 的 生活大爆炸版石头剪刀布 ,只需要按照题面的意思来写就可以了。

当然,模拟并不总是很好写,参见经典题目 魔兽世界 和 猪国杀 。

模拟题目通常具有码量大、操作多、思路繁复的特点。并且由于它码量大,会导致很难查错,如果在考试中写错是相当浪费时间的。

所以写模拟题,遵循以下的建议有可能会帮助你提升做题速度:

  1. 在动手写代码之前,在草纸上尽可能地写好要实现的流程;
  2. 在代码中,尽量把每个部分模块化、写成函数、结构体或类;
  3. 对于一些可能重复用到的概念,可以统一转化,方便处理:如,某题给你 "YY-MM-DD 时:分" 把它扔到一个函数处理成秒,会减少概念混淆;
  4. 调试时分块调试,模块化的好处就是可以方便的单独调某一部分;
  5. 写代码的时候一定要思路清晰,不要想到什么写什么,要按照落在纸上的步骤写。

实际上,上述步骤在解决其它类型的题目时也是很有帮助的。

一、倒序模拟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解题代码:

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int t,i=0;
    long long m;
    cin>>t>>m;    //操作次数和最终的数
    long long opt[t],x[t];
    for(i=0;i<t;i++){//用数组依次记录opt[i]与x[i] 
        cin>>opt[i]>>x[i];
    }
    for(i=t-1;i>=0;i--){//倒叙模拟
        switch(opt[i])
        {
            case 1:m=m-x[i];break;
            case 2:m=m+x[i];break;
            case 3:m=m/x[i];break;
            case 4:m=m*x[i];break;
            default : break; 
        }        
    }
    cout<<m<<endl; 
    return 0;
 } 

解题思路:注意运用数组思想进行每轮数据的依次存储,不要与模拟手算混淆。

原文地址:https://www.cnblogs.com/h694879357/p/13337268.html