模擬演算法
阿新 • • 發佈:2020-07-18
模擬。顧名思義,就是用計算機來模擬題目中要求的操作,比如 NOIP 2014 的生活大爆炸版石頭剪刀布,只需要按照題面的意思來寫就可以了。
模擬題目通常具有碼量大、操作多、思路繁複的特點。並且由於它碼量大,會導致很難查錯,如果在考試中寫錯是相當浪費時間的。
所以寫模擬題,遵循以下的建議有可能會幫助你提升做題速度:
- 在動手寫程式碼之前,在草紙上儘可能地寫好要實現的流程;
- 在程式碼中,儘量把每個部分模組化、寫成函式、結構體或類;
- 對於一些可能重複用到的概念,可以統一轉化,方便處理:如,某題給你 "YY-MM-DD 時:分" 把它扔到一個函式處理成秒,會減少概念混淆;
- 除錯時分塊除錯,模組化的好處就是可以方便的單獨調某一部分;
- 寫程式碼的時候一定要思路清晰,不要想到什麼寫什麼,要按照落在紙上的步驟寫。
實際上,上述步驟在解決其它型別的題目時也是很有幫助的。
一、倒序模擬
解題程式碼:
#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; }
解題思路:注意運用陣列思想進行每輪資料的依次儲存,不要與模擬手算混淆。