1. 程式人生 > 實用技巧 >模擬演算法

模擬演算法

模擬。顧名思義,就是用計算機來模擬題目中要求的操作,比如 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; }

解題思路:注意運用陣列思想進行每輪資料的依次儲存,不要與模擬手算混淆。