您的位置:首页 > 编程语言 > C语言/C++

华为OJ——iNOC产品部-杨辉三角的变形

2016-07-15 20:31 190 查看
iNOC产品部-杨辉三角的变形

题目描述

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。

输入n(n <= 1000000000)

[b]输入描述:[/b]
输入一个int整数

[b]输出描述:[/b]
输出返回的int值

[b]输入例子:[/b]
4
[b]输出例子:[/b]
3
解答代码:

#include<iostream>
using namespace std;

int main()
{
int n;
int i,j;
while(cin>>n)
{
int judge[1000][2000]= {0};
judge[0][0]=1;
//初始化三角形左侧和右侧的数
for(int i=1; i<n; i++)
{
judge[i][0]=1;
judge[i][2*i]=1;
}
judge[1][1]=1;
//初始化三角形中间部分的数
for(i=2; i<n; i++)
{
judge[i][1]=judge[i-1][0]+judge[i-1][1];
judge[i][2*i-1]=judge[i][1];
}
for(i=2; i<n; i++)
{
for(int j=2; j<=2*i-1; j++)
judge[i][j]=judge[i-1][j]+judge[i-1][j-1]+judge[i-1][j-2];
}
//查看输出
/*
for(i=0;i<n;i++)
{
for(j=0;j<2*n-1;j++)
cout<<judge[i][j]<<' ';
cout<<endl;
}
*/
int k=0;
for(i=0; i<2*n-1; i++)
{
if(judge[n-1][i]%2==0)
{
k++;
cout<<i+1<<endl;
break;
}
}
if(k==0)
cout<<"-1"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ C语言 OJ 华为 算法