华为机试HJ53:杨辉三角的变形

简介: 华为机试HJ53:杨辉三角的变形

题目描述:

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。


求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。


输入n(n <= 1000000000)


本题有多组输入数据,输入到文件末尾,请使用while(cin>>)等方式读入


输入描述:

输入一个int整数

输出描述:

输出返回的int值

示例:

输入:

4

2


输出:

3

-1

解题思路:

本题两种解题思路。


1.第一种就是常规求解,见代码一。输入k行,按照杨辉三角的规律创建k行的三角数阵,然后在第k行寻找首次出现偶数的下标即可。

2.第二种就是找规律求解,见代码二。分析后可知,前两行为-1,从第三行开始有2324的循环,所以当行数为奇数,结果就为2;当行数被4整除,结果为3;其他就为4。


测试代码:

代码一:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int num;
    while(cin>>num)
    {
        int row=num;
        int col=2*num-1;
        int L[row][col];
        for(int j=0;j<col;++j)
        {
            L[0][j]=0;
        }
        L[0][row-1]=1;
        for(int i=1;i<row;++i)
        {
            for(int j=1;j<col-1;++j)
            {
                L[i][j]=L[i-1][j-1]+L[i-1][j]+L[i-1][j+1];
            }
            L[i][0]=L[i-1][0]+L[i-1][1];
            L[i][col-1]=L[i-1][col-1]+L[i-1][col-2];
        }
        int id=0;
        bool getresult=false;
        for(int j=0;j<col;++j)
        {
            if(L[row-1][j]%2==0)
            {
                cout<<j+1<<endl;
                getresult=true;
                break;
            }
        }
        if(!getresult)
            cout<<"-1"<<endl;
    }
    return 0;
}

代码二:

#include<iostream>
using namespace std;
int main(){
    int num;
    while(cin>>num){
        if(!num||num==1||num==2) cout<<-1<<endl;
        else if(num&1) cout<<2<<endl;
        else if(num%4) cout<<4<<endl;
        else cout<<3<<endl;
    }
    return 0;
}


相关文章
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
147 0
华为机试HJ107:求解立方根
华为机试HJ107:求解立方根
151 1
|
算法
华为机试HJ108:求最小公倍数
华为机试HJ108:求最小公倍数
110 1
华为机试HJ88:扑克牌大小
华为机试HJ88:扑克牌大小
116 0
|
机器学习/深度学习
华为机试HJ35:蛇形矩阵
华为机试HJ35:蛇形矩阵
|
存储
华为机试HJ43:迷宫问题
华为机试HJ43:迷宫问题
113 0
华为机试HJ83:二维数组操作
华为机试HJ83:二维数组操作