MOOC清华《程序设计基础》第6章:分鱼问题(从A到E递推)

来源:互联网 发布:python 分钟减1 编辑:程序博客网 时间:2024/05/17 07:31

#include <iostream>using namespace std;int main(){int num[5];for(num[0] = 1;  ; num[0]++){if(num[0] % 5 != 1)continue;/*num[1] = (num[0] - 1) / 5 * 4;if(num[1] % 5 != 1)continue;num[2] = (num[1] - 1) / 5 * 4;if(num[2] % 5 != 1)continue;num[3] = (num[2] - 1) / 5 * 4;if(num[3] % 5 != 1)continue;num[4] = (num[3] - 1) / 5 * 4;if(num[4] % 5 != 1)continue; //注意流程的巧妙控制*///上述代码可以简化为以下循环结构 int i;for(i = 1; i <= 4; i++){num[i] = (num[i - 1] - 1) / 5 * 4;if(num[i] % 5 != 1) break;}if(i <= 4)continue;break;} //代码优化提示1:可以让num[0]以5为步长,这样就省去了num[i] % 5 != 1 这条判断 //代码优化提示2:num[0]至少是6 * (5 / 4) ^ 4 约等于15,所以可以从16开始枚举//但是代码优化只是减轻了机器的计算量,却增加了人的计算量,我认为这是得不偿失的 for(int i = 0; i < 5; i++){cout << "num[" << i << "] = " << num[i] << ' ' << endl;cout << char(i + 65) << " 分到了 " << (num[i] - 1) / 5 << " 条鱼!" << endl;cout << endl;} return 0;}


个人关于“代码优化”的看法:

第一,代码优化的目的是减轻人的工作量,而不是机器的;

第二,代码优化有两种情况:已经知道结果了再来优化,姑且称为“后验优化”,尚未运行出结果时的优化,姑且称为“先验优化”。我们需要的应该是先验优化,如果已经知道结果了再来优化,那是多余的。


阅读全文
0 0