华为初级——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。

这道题目不是很难~

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

时间: 2024-10-02 13:18:29

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

[华为oj]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. 1 #include <iostream> 2 #include <deque> 3 4 usin

华为OJ——iNOC产品部--完全数计算

题目描述 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身. 例如:28,它有约数1.2.4.7.14.28,除去它本身28外,其余5个数相加,1+2+4+7+14=28. 给定函数count(int n),用于计算n以内(含n)完全数的个数.计算范围, 0 < n <= 500000 返回n以内完全数的个数.异常情况返回-1 输入描述: 输入一个数字 输出描述: 输出完全数的个数 输入例

华为初级——(练习用)挑7

源程序: #include<iostream> #include<string> using namespace std; int main() { int n;char buffer[6]; int count=0; int len; cin>>n; for(int i=1;i<=n;i++) { if((i%7)==0)count++; else { itoa(i,buffer,10); len=strlen(buffer); for(int j=0;j<

华为初级——图片整理

源程序: #include<iostream> #include<string> using namespace std; //const int max=1024; int main() { char s[1024]; char temp; gets(s); int len; len=strlen(s); for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(s[i]>s[j]) { temp=s[i];s

华为初级——字符个数统计(三种情况)

第一种情况: 描述:写出一个程序,接受一个有字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 知识点:字符串,函数,指针   题目来源:内部整理   练习阶段:初级   运行时间限制:10Sec  内存限制:128MByte  输入:输入一个有字母和数字组成的字符串,和一个字符.   输出:输出输入字符串中含有该字符的个数.  样例输入: ABCDEF A                    样例输出: 1 源程序: #include<iostream>

华为初级——名字的漂亮度

值得注意:对于每个名字来说:名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的-- 源程序: #include<iostream> #include<string> using namespace std; const int M=50; int main() { int n,i,j,k,len; int beauti[M]={0}; int t; cin>>n; char a[M][30]; for(i=0;i<n;i++) cin

华为初级——提取不重复的整数

描述:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 知识点:数组 题目来源:内部整理 练习阶段:初级 运行时间限制:10sec 内存限制:128MByte 输入:输入一个int型整数 输出:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 样例输入:9876673 样例输出:37689 源程序: #include<iostream> using namespace std; int main() { void getNoRepeatNumber(int

华为初级——合唱队

提示:这是属于动态规划问题.动态规划算法通常用于求解具有某种最优性质的问题.在这类问题中,可能会有许多可行解.每一个解都对应于一个值,我们希望找到具有最优值的解. 其实这道题目有一些问题:不能交换位置,这个关键的信息在题目中间没有进行说明. 编程思路是:需要三个数组,第一个数组存放原数据.第二个数组用于存放人数:从左向右遍历时,对于当前的数据(身高),寻找符合条件的人数,要求是从小到大排列的最大数.第三个数组用于存放人数:从右向左遍历,对于当前的数据,寻找符合条件的人数,要求从大到小排列的最大数

华为初级——百钱买百鸡

源程序: #include<iostream> using namespace std; int main() { for(int i=0;i<=20;i++) { for(int j=0;j<34;j++) { for(int k=0;k<=300;k=k+3) { if(i*5+j*3+k/3==100&&i+j+k==100) cout<<i<<' '<<j<<' '<<k<<end