关于程序算法手动演算手推及演草

      读程序或者算法的时候,有经验的人可能多看几步,但是没有谁能看几十甚至几百步的,程序我们知道是一句一句执行的,在调试的时候叫单步执行,程序是存在跳转和分支的,在考试的时候经常要回答结果以考察对算法的分析能力,又不能带个笔记本到考场,所以程序要通过在草稿纸上手推,最好不要心算,手算麻烦一些,但是每一步的结果都写在纸上,不会出错。

       这个是个数组循环右移的程序

#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    vector<int> v;
    v.push_back(2);
    v.push_back(8);
    v.push_back(4);
    v.push_back(3);
    v.push_back(9);
    
    for (int i = 0; i < 3; i++)
    {
        int t = v[4];
        for (int j = 4; j >= 1; j--)
        {
            v[j] = v[j-1];
        }
        v[0] = t;
    }
    
    for (int i = 0; i < 5; i++)
    {
        
        cout  << v[i] << " ";
    }
	
	return 0;
}

 对于中间的两个for循环,我们加上行号

10 for (int i = 0; i < 3; i++)
11 {
12      int t = v[4];
13      for (int j = 4; j >= 1; j--)
14      {
15            v[j] = v[j-1];
16       }
17       v[0] = t;
18 }

下面就来在草稿纸上单步运行,变量没变或者自己知道多少就不写
10:  i = 0; v=[2 8 4 3 9]
12:  t = 9; 
13:  j = 4
15:  v = [2 8 4 3 3]
13:  j = 3
15:  v = [2 8 4 4 3]  
13: j = 2
15: v = [2 8 8 4 3]
13: j = 1
15: v = [2 2 8 4 3]
13: j = 0
17: v = [9 2 8 4 3]

 

这个下面就不用再执行下去了,可以发现这个for(j..就是再向右转一个数,这样i = 1 i = 2以后,v应该是[4 3 9 2 8]
其实算法程序就像数学应用题先找到一个公式或者一个代数方程组,然后把参数带进去一步一步算,得到结果,反之,这个手演算
的过程也可以启发编算法和找到更好的算法,有些是心里面心算或者叫运筹和手算也可以叫沙盘推演结合的

 

posted @ 2021-05-19 23:13  abcstar  阅读(87)  评论(0编辑  收藏  举报