华为OJ——iNOC产品部-杨辉三角的变形
2017-07-25 14:04
295 查看
题目描述
以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。
输入n(n <= 1000000000)
输入描述:
输入一个int整数
输出描述:
输出返回的int值
示例1
输入
4
输出
3
实现代码:
方法一:
思路:
①补零,使之成为方形
②只需要初始化第一行的中间的数为1(事实上就是第一个数,因为补了零之后,就变成了中间的数)
以及最后一行的一个数和最后的一个数,避免越界
③根据每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。 得到公式:a[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1];即可得出补零之后的杨辉三角
方法二:
思路:纯粹看第一个偶数的规律
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)
输入描述:
输入一个int整数
输出描述:
输出返回的int值
示例1
输入
4
输出
3
实现代码:
方法一:
思路:
①补零,使之成为方形
②只需要初始化第一行的中间的数为1(事实上就是第一个数,因为补了零之后,就变成了中间的数)
以及最后一行的一个数和最后的一个数,避免越界
③根据每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。 得到公式:a[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1];即可得出补零之后的杨辉三角
package cn.c_shuang.demo51; import java.util.Scanner; /** * iNOC产品部-杨辉三角的变形 * @author Cshuang * */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); int[][]a=new int [2*n-1]; //将杨辉三角补0,使之变为长方形 for (int i = 0; i < n; i++) { for (int j = 0; j < 2*n-1; j++) { a[i][j]=0; } } a[0][n-1]=1;//第一行中间的数为1 a[n-1][0]=a[n-1][2*n-2]=1;//第n行的第一个数和最后一个数为1 for (int i = 1; i < n; i++) { //之所以只到了2n-2,避免越界,因为每一行有2n-1个元素,而除了最后一行外,其他行的第2n-1个元素是0 //而最后一行的最后一个元素(第2n-1个元素,编号2n-2)已经初始化,所以可以跳过去 for (int j = 1; j < 2*n-2; j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]; } } for (int i = 0; i < 2*n-1; i++) { if(a[n-1][i]%2==0&&a[n-1][i]!=0){ System.out.println(i+1); break; }else if(i==2*n-2){ System.out.println(-1); } } } in.close(); } }
方法二:
思路:纯粹看第一个偶数的规律
package cn.c_shuang.demo51_1; import java.util.Scanner; /** * iNOC产品部-杨辉三角的变形 * @author Cshuang * 看规律 */ public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); if(n<=2) System.out.println(-1); else if(n%2==1) System.out.println(2); else if(n%4==0) System.out.println(3); else System.out.println(4); } in.close(); } }
相关文章推荐
- 华为OJ——iNOC产品部-杨辉三角的变形
- 【华为OJ】【038-iNOC产品部-杨辉三角的变形】
- [华为OJ--C++]038-iNOC产品部-杨辉三角的变形
- [华为oj]iNOC产品部-杨辉三角的变形
- 华为oj_iNOC产品部-杨辉三角的变形
- 华为OJ——iNOC产品部-杨辉三角的变形
- 华为oj----iNOC产品部-杨辉三角的变形 .
- 华为oj iNOC产品部-杨辉三角的变形
- 【华为OJ】iNOC产品部-杨辉三角的变形
- 华为oj 初级 iNOC产品部-杨辉三角的变形
- 华为oj inoc产品部--杨辉三角的变形
- 【华为机试】iNOC产品部-杨辉三角的变形
- 华为机试:iNOC产品部--完全数计算、杨辉三角的变形
- 华为oj 初级 iNOC产品部--完全数计算
- 华为OJ基础篇-iNOC产品部–完全数计算
- 华为OJ——iNOC产品部--完全数计算
- 【华为OJ】【036-iNOC产品部--完全数计算】
- iNOC产品部-杨辉三角的变形
- 华为OJ训练之0024-170107-杨辉三角的变形
- 华为OJ(杨辉三角变形)