首页 > 代码库 > 华为初级——iNOC产品部:杨辉三角形的变形

华为初级——iNOC产品部:杨辉三角形的变形


源程序:

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[100][100];
	for(int i=0;i<n;i++)
	{
		a[i][0]=1;
		a[i][i*2]=1;
	}
	a[1][1]=1;
	for(int j=2;j<n;j++)
	{
		a[j][1]=a[j-1][0]+a[j-1][1];
		a[j][j*2-1]=a[j-1][(j-1)*2]+a[j-1][(j-1)*2-1];
		for(int k=2;k<j*2-1;k++)
		{
			a[j][k]=a[j-1][k-2]+a[j-1][k-1]+a[j-1][k];
		}
	}
	int flag;
	for(int j=0;j<=(n-1)*2;j++)
	{
		flag=1;
		if(a[n-1][j]%2==0)
		{
			cout<<j+1<<endl;
			flag=0;
			break;
		}
	}
	int defa=-1;
	if(flag)cout<<defa<<endl;	
	/*
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<=i*2;j++)
		{
			cout<<a[i][j]<<'\t';
		}
		cout<<endl;	
	}
	*/
	return 0;
}
运行结果:


总结:这道题目的关键在于求出这个变形的杨辉三角形。其实题目的描述有很大问题,但是已经给出了变形了的杨辉三角形,所以,可以根据例出来的三角形来写出程序。

首先:写出求杨辉三角形的程序:每一行的第一个数和最后一个数都是1;第二行的第二个数是1,;从第三行开始,每一行的第二个数是前一行的第一个数与第二个数之和,每一行的倒数第二个数是前一行的倒数第一个数与倒数第二个数的和。

然后:求出第n行的第一个偶数出现的位置。

注意:如果这一行没有偶数,则输出-1。

这道题目不是很难~