算法学习day01

245 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

概述

学习算法的目的是为了提高自己的软件编写,解决问题的能力,这种能力是在今后的工作或者项目开发过程中所需要展现出来的关键能力

本文使用C++语言,也可能会涉及一些Java语言用来做对比。相比较Java语言,C++语言运行效率更快,Java适用于开发,但是算法个人更推荐C++

本文不介绍C++和Java基本语法,想要学习请点击下方链接

菜鸟教程 C++

菜鸟教程 Java

例题(简单算法入门)

1.输出菱形

#include <iostream>//导入头文件
#include <string>
using namespace std;//定义命名空间
int main()
{
    char c;
    cout <<"   " << c <<endl;//输出,<<endl是换行,可以没有
    cout <<" " << c << c << c <<endl;//输出时如果要进行格式控制可以用C中的printf();
    cout << c << c << c << c << c <<endl;
    cout <<" " << c << c << c <<endl;
    cout <<"  " << c <<endl;
    return 0;
}

本题是C++最简单的输出题,根据想要图形直接进行输出就可以

2.判断闰年

非常简单,非常经典的一道题,我接触编程以来最常遇到的就是判断闰年和判断质数,提醒各位小伙伴,闰年的判断条件一定要记好呦

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int year;
    cin>>year;//输入,不限制类型
    //第一种方式,先判断是否能被100整除,若能,判断是否能被400整除,若否,判断是否能被4整除。
    //第一种方法注意if的先后顺序
    if(year%100==0){
        if(year%400==0)cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }else{
        if(year%4==0)cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }
    //第二种方法,直接将是闰年的两种情况一起列出,中间用||来进行连接
    //请注意&&与&,||与|的区别
    if(year%4==0&&year%100!=0||year%400==0){
        cout<<"yes"<<endl;
    }else{
        cout<<"no"<<endl;
    }
    return 0;
}

3.斐波+那契数列

斐波那契数列是非常经典的一道题目,目前有两种解法,之后我会分别写出

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

第一种

#include<iostream>
using namespace std;
int main()
{
    //斐波那契数列第一种解法,F(n)=F(n - 1)+F(n - 2)
    int n;
    cin>>n;//输入需要得到斐波那契数列的第几项
    int a=1,b=1;,i=1;//a,b是数列的第一、二个值,i是用来判断第几项的数值
    while(i<n)//知道i大于n才结束循环,相当于求得第n项的值后结束
    {
        int c=a+b;//c指下一项
        a=b;//令第i项的第二个元素作为第i+1项的第一个元素,即n-2项
        b=c;//将目前第i项的值作为i+1项的第二个元素,即n-1项
        i++;//将i的值加一,保证循环可以退出,并且求第i+1项的数值
    }
    cout<<a<<endl;
    return 0;
}

第二种

#include<iostream>
using namespace std;
//第二中方法
int fib(int n)//用到函数,使用函数时注意的形参和实参的区别
{
    if(n==1 || n==2)//确定前两个数,也是递归的出口
        return 1;
    else
        return Fib(n-1)+Fib(n-2);//使用了递归,递归就是自己调用自己,是一种非常简便的写法
}
void main()
{
    int n;
    cout<<"请输入n:";
    cin>>n;
    cout<<"第"<<n<<"项的斐波那契值为:>"<<Fib(n)<<endl;
}

PS:第一种方法比第二种方法运效率要高