题目描述
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[n][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();
}
}