上完课过来整理一下笔记
1、穷举法
//百钱买百鸡问题(简化后) #include <stdio.h> #include <stdlib.h> int main() { int i,j,k; for(i=0; i<20; i++) { for(j=0; j<34; j++) { k=100-i-j; if(i*15+j*9+k==300) { printf("%d %d %d\n",i,j,k); } } } return 0; }
2、迭代法
//求解一元三次方程指定范围的根 #include <stdio.h> #include <stdlib.h> #include <math.h> double biroot(double,double); double foo(double); int main() { double x1,x2; do { scanf("%lf%lf",&x1,&x2); }while(foo(x1)*foo(x2)>0); printf("%.2f\n",biroot(x1,x2)); return 0; } double biroot(double x1,double x2) { double ret; do { ret=(x1+x2)/2; if(foo(ret)*foo(x1)>0) { x1=ret; } else { x2=ret; } }while(fabs(x1-x2)>=1e-7); ret=(x1+x2)/2; return ret; } double foo(double x) { return(x*x*x-7.7*x*x+19.2*x-15.3); }
3、牛顿迭代(牛顿切线法)
//求解一元三次方程在1.0附近的根 #include <stdio.h> #include <stdlib.h> #include <math.h> double ntroot(double); double foo(double); double dfoo(double); int main() { double x0; scanf("%lf",&x0); printf("%.2f\n",ntroot(x0)); return 0; } double ntroot(double x) { double x0; double f,df; do { x0=x; f=foo(x0); df=dfoo(x0); x=x0-f/df; } while(fabs(x-x0)>=1e-7); return x; } double foo(double x) { return (x*x*x-7.7*x*x+19.2*x-15.3); } double dfoo(double x) { return(3.0*x*x-15.4*x+19.2); }
4、递推法(归纳法)
//累加和累乘 #include <stdio.h> #include <stdlib.h> #include <math.h> double getSum(int); int main() { int n; scanf("%d",&n); printf("%f\n",getSum(n)); return 0; } double getSum(int n) { }