11/10笔记
1.cin.peek()函数 char ch=cin.peek(),从输入流中看第一个输入的东西,且不拿走。这个是有用的呀,可以对付好多题目。
还有 cin.get() 取走输入流里的第一个,不返回给谁。
2.递归:类似求表达式的递归是分层的,最外面是加减项,项里面有乘除因子,因子分为数和括号,而括号里面是项,以此为递归。而这在题目中是没有告诉我的,题目只说要用程序计算表达式,这又说明对题目的分析要透彻。
3.判断两个浮点数相等,不能用“==”,因为……一些原因,要这样:(a和b相同)
#define EPS 1e-6
bool iso(double x){
return( fabs(x)<=EPS);
}
if ( iso ( a - b ) ) { }
4.多个数字的递归问题,要机智的使用数组,不但把要处理的数放进数组,还要把你处理的一个数在放回数组,然后再递归处理数组。
5.二分查找:处理区间端点的技巧,L=0或者mid+1,R=size-1或者mid-1;找不到的结束临界是L>R;
取L和R的中点时用mid=L+(R-L)/2; 防止(L+R)/2时L+R过大;
6.计算数组中有多少个元素: int size= sizeof(a)/sizeof(int) //a是数组;
7.动态规划:状态空间(多维数组)+状态转移方程(已知推未知)
要使用dp,1>要求的是问题的最优解问题,且问题的最优解同时是子问题的最优解。
2>无后效性,只和当前状态值有关,和当前状态值是如何取得的无关。