关闭

杨辉三角的变形【编程题】

63人阅读 评论(0) 收藏 举报
分类:

题目

描述

          1
       1  1  1
    1  2  3  2  1
  1 3  6  7  6  3  1
1 4 10 16 19 16 10  4  1

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。

输入

输入一个int整数

输出

输出返回的int值

样例输入

4

样例输出

3

代码

这题毫无思路。。。看过大神的代码。。。我可以膜拜一下了
这题用递归写的真是太赞了~

#include <iostream>
using namespace std;
int C(int n,int k)
{
    if(k==1 || k==n*2-1)
        return 1;
    if (k<1 ||k>n*2-1)
        return 0;
    else
        return C(n-1,k-2)+C(n-1,k-1)+C(n-1,k);
}
int main()
{
    int N;
    cin>>N;
    for(int j=1; j<=2*N-1; j++)
    {
        if(C(N,j)%2==0)
        {
            cout<<j<<endl;
            break;
        }
        else if(j==2*N-1)
            cout<<"-1"<<endl;
    }
}

第二个代码。。。
大神用栈的思想一层一层来求。。。膜拜

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> current,next;
    int n;
    cin>>n;
    n--;//第一行没有偶数
    current.push_back(1);//最左边的1
    while(n--)
    {
        next.push_back(1);
        if(current.size()==1)//第二行
        {
            next.push_back(1);
        }
        else//中间的数
        {
            for(unsigned int i=0; i<current.size(); i++)
            {
                if(i==0)
                {
                    next.push_back(current[i]+current[i+1]);
                }
                else if(i<=current.size()-2)
                {
                    next.push_back(current[i]+current[i-1]+current[i+1]);
                }
                else
                {
                    next.push_back(current[i]+current[i-1]);
                }
            }
        }
        next.push_back(1);//最右边的1
        current.clear();
        current=next;
        next.clear();
    }
    unsigned int i;
    for(i=0; i<current.size(); i++)
    {
        if(current[i]%2==0)
        {
            cout<<i+1<<endl;
            break;
        }
    }

    if(i==current.size())
    {
        cout<<-1<<endl;
    }
    return 0;
}

这里写图片描述

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8611次
    • 积分:925
    • 等级:
    • 排名:千里之外
    • 原创:88篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条