• 递归 回溯 循环


    #if 1
    #include <iostream>
    using namespace std;
    
    void move(int n,char A, char B, char C)
    {
        if(1==n)
        {
            cout<<A<<"-->"<<C<<endl;
        }
        else
        {
            move(n-1, A, C, B);
            cout<<A<<"-->"<<C<<endl;
            move(n-1, B, A, C);
        }
    }
    
    int main()
    {
        cout <<"please input the  hanoi number:";
        int num;
        cin>>num;
        char A='a';
        char B='b';
        char C='c';
        move(num, A, B, C);
        return 0;
    }
    #else
    #include <iostream>
    using namespace std;
    int fun(int n)
    {
        if(n==1)
            return 1;
        if(n==0)
            return 0;
        return fun(n-1)+fun(n-2);
    }
    
    int CalAge(int n)
    {
        if(1==n)
        {
          return 10;
        }
        return CalAge(n-1)+2;
    }
    int main()
    {
        int i;
        int a[12];
        a[0]=0;
        a[1]=1;
        cout<<a[0]<<endl;
        cout<<a[1]<<endl;
        for(i=2; i<=12;i++)
        {
            a[i]=a[i-1]+a[i-2];
            cout<<a[i]<<endl;
        }
        cout<<"aaa"<<endl;
        cout<<fun(12)<<endl;
        cout<<" age 5"<<endl;
         cout<<CalAge(5)<<endl;
        return 0;
    }
    #endif

    求素数 大于1 只能被1跟本身除的数      

    #include <iostream>
    #include <cmath>
    using namespace std;
    int fun(int temp)
    {
        for(int j=2; j<temp; j++)
       // for(int j=2; j<=sqrt(temp); j++)  
        {
            if(temp%j == 0)
            {
                return 0;
            }
        }
        return 1;
    }
    int main()
    {
        int n;
        cout<<"please intput n n must > 1:";
        cin>>n;
        int out=0;
        for(int i=2;i<=n;i++)
        {
            if(1==fun(i))
            {
                out++;
                if(out>10)
                {
                   out=1;
                   cout<<endl;
                }
                cout<<i<<" ";
            }
        }
        cout<<endl;
        return 0;
    }
    

    题目二:一只青蛙一次可以跳上一级台阶,也可以跳上2级台阶,求该青蛙跳上n级台阶的共有多少种跳法。

    思路:当只有一级台阶的时候,青蛙的跳法也只有一种。当有两级台阶的时候,青蛙的跳法有两种(一是:一下跳两级台阶,二是:一级一级的跳)。当有n级台阶的时候,青蛙在第一次起跳的时候只跳了一级台阶,则还剩下n-1级台阶的跳法,如果在第一次起跳的时候跳了两级台阶,则还剩下n-2级台阶的跳法。整个题目正好是一个斐波拉契数列。公式如下:

    int Frog(int n)
    {
        if(1==n || 2==n)
        {
          return n;
        }
        return Frog(n-1)+Frog(n-2);
    }

    八皇后问题 回溯 

    #include <iostream>
    using namespace std;
    int ChessBoard[8][8];    /*棋盘*/
    void InitsChessBorad()  // 初始化
    {
        for(int row = 0;row<8;row++)
        {
            for(int column = 0; column<8; column++)
            {
                ChessBoard[row][column] = 0;
            }
        }
    }
    void PrintChessBoard() //打印棋盘
    {
        static int Num = 0;
        Num = Num + 1;
        cout<<"the "<<Num <<" is:"<<endl;
        for(int row = 0; row<8;row++)
        {
            for(int column =  0; column <8; column ++)
            {
                if(ChessBoard[row][column])
                {
                    cout<<"Q";
                }
                else
                {
                    cout<<"+";
                }
            }
            cout<<endl;
        }
        cout<<endl;
    }
    bool Conflicts(int row, int column) // 判断冲突
    {
        for(int i=1; i<8; i++)
        {
            if(row-i>=0 && ChessBoard[row-i][column])
            {
                return true;
            }
            if(column-i>=0 && ChessBoard[row][column-i])
            {
                return true;
            }
            if(column-i>=0 && row-i>=0 && ChessBoard[row-i][column-i])
            {
                return true;
            }
            if(row-i>=0 && column+i<8 && ChessBoard[row-i][column+i])
            {
                return true;
            }
        }
        return false;
    }
    /* place_queen
    ** 放置皇后
    ** 第一行不需要检查,因为只有一个皇后。皇后放置的位置设置为true。
    ** 如果某M行的所有列放置皇后都存在互相攻击,那么需要返回到M-1行中放置皇后的位置,
    ** 将M-1行的皇后位置设置为false,寻找这行的下一个可以放置皇后的位置,如果存在再检查第M行可以放置皇后的位置。
    ** 如果不存在,则返回到第M-2行。
    ** 如果8个皇后成功放置完毕,则打印棋盘.
    */
    void QueenPlace(int row) // 棋盘放置
    {
        for(int column = 0;column<8;column++)
        {
            ChessBoard[row][column] = 1;
            if(row ==0 || !Conflicts(row, column))
            {
                if(row <7)
                {
                    QueenPlace(row+1);
                }
                else
                {
                    PrintChessBoard();
                }
            }
            ChessBoard[row][column] = 0;
        }
    }
    int main()
    {
        InitsChessBorad();
        QueenPlace(0);
        return 0;
    }
    
    关注公众号 海量干货等你
  • 相关阅读:
    交换实验
    路由引入和控制
    ISIS
    BGP联盟
    BGP2
    bgp
    Linux日常总结
    配置本地yum源方法
    达梦数据库常见问题-安装
    达梦数据库常见问题-安装
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734518.html
Copyright © 2020-2023  润新知