zoukankan      html  css  js  c++  java
  • 华为oj----iNOC产品部-杨辉三角的变形 .

    此题提供三种方法,第一种,一开始就能想到的,设置一个足够大的数组存储生成的杨辉三角,然后进行判断就行,此方法参见:华为oj iNOC产品部-杨辉三角的变形

    另一种方法是采用递归:

    三角形的每行的个数为2*n-1,n为行数,且每行的数字左右对称。因此在查找偶数时,只需查找前n个数即可。

    运用递归的思想:n行第i个数等于n-1行的第i-2,i-1,i个数相加(而不是i-1,i,i+1三个数),其次要注意的是:边缘的数都是1,边缘外的数都是0。

    #include<iostream>
    
    using namespace std;
    
    int Getpos(int line,int num)
    {
        if(num<1 || num>2*line-1)
            return 0;
        else if(num==1 || num==2*line-1)
            return 1;
        else
            return Getpos(line-1,num-2)+Getpos(line-1,num-1)+Getpos(line-1,num);
            
    }
    
    int run(int x)
    {
        int tmp;
        for(int i=1;i<=x;i++)
            if(Getpos(x,i)%2==0)
                return i;
        return -1;
    }
    
    int main()
    {
        int t;
        cin >>t;
        cout << run(t);
        return 0;
    }

    第三种方案是通过找规律:

      找规律会发现最终返回的结果只能有,-1,2,3,4 这四种结果,代码比较简单,方法参见:华为oj iNOC产品部-杨辉三角的变形

  • 相关阅读:
    [Linux]
    [Nginx]
    [Nginx]
    [Linux]
    [Linux]
    [Linux]
    [Linux]
    [Linux] -Docker修改空间大小
    [Linux]
    [MySql]
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/6367902.html
Copyright © 2011-2022 走看看