算法复习笔记之重要算法(一)

算法复习笔记之重要算法(一)

目录:

    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;
 }



猜你喜欢

转载自blog.csdn.net/qq_37457202/article/details/80434252