算法复习笔记之重要算法(一)
目录:
1.斐波那契
2.钱币问题
主要算法介绍:
一、求斐波那契数列的第N项
1.1 斐波那契数数列的性质:
方法:
1.1.1 递推
1.1.2递归
1.1.3动态规划
1.1.4数学方法
1.1.1递推方法代码:
#include<iostream> usaing namespace std; int main() { int n,a,b,t,i; a=1;b=1; scanf("%d",&n); if(n==1||n==2) coutMM1<<endl; else { for(i-1;i<=n;i++) cout<<t<<endl; } return 0; }
1.1.2
#include<iostream> using namespace std; int f(int k) { if(k<=2) return 1; else return f(k-1)+f(k-2); } int main() { int n,a,b,i; a=1;b=1; cin>>n; cout<<(n)<<endl; return 0; }
1.1.3
#include<iostream> using namespace std; const int n=20; int a[n]={0,1,1}; int main() { int n,i; scanf("%d",&n); for(i=3;i<=n;i++) a[i]=a[i-1]+a[i-2]; cout<<a[n]<<endl; return 0; }
1.1.4 数学公式
#include<iostream> #include<cmath> using namespace std; int main() { int n,i; float t; scanf("%d",&n); t=(pow(1+sqrt(5)/2,n)-pow((1-sqrt(5)/2),n))/sqrt(5); printf("%.0f\n",t); return 0; }
二、钱币兑换”问题
2.1枚举法
#include<iostream> using namespace std; int main() { int x,y,z,total=0; for(x=0;x<=100;x++) for(y=0;y<=50;y++) for(z=0;z<=20;z++) if(x+2*y+5*z==100) totol++; cout<<total<<endl; return 0; }
2.2 贪心法
#include<iostream> using namespace std; int main() { int x,n,total=0; cin>>n; while(n>=5) { total++; n-=5; } while(n>2) { total++; n-=2; } cout<<total<<endl; return 1; }