1 import java.util.Scanner; 2 3 /** 4 * 杨辉三角的变形 5 *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的 6 *记为0 7 * 1 8 * 1 1 1 9 * 1 2 3 2 1 10 * 1 3 6 7 6 3 1 11 * 1 4 10 16 19 16 10 4 1 12 * 1 5。。。 13 *求第x行的第一个偶数是第几个 14 * 15 */ 16 public class YangHui { 17 18 public static void main(String[] args) { 19 Scanner cin = new Scanner(System.in) ; 20 int line = cin.nextInt() ; 21 cin.close(); 22 23 System.out.println(run(line)) ; 24 25 } 26 27 //计算返回值 28 public static int run(int x){ 29 //第一行、第二行均没有偶数 30 if(x == 1 || x == 2){ 31 return -1 ; 32 } 33 //每一行的第一个数为1,第二个数为n-1;第三个数为 n*(n-1)/2 34 if(x%2 == 1){ 35 return 2 ; 36 }else if(x*(x-1)%4 == 0){ 37 return 3 ; 38 } 39 //若前三个均不是偶数,则从第四个数开始计算,由于是对称的的,所以判断到第x行的第x个数就可以了 40 for(int i = 4 ; i <= x ; i++){ 41 42 int res = cal(x,i) ; 43 if(res%2 == 0){ 44 return i ; 45 } 46 } 47 return -1 ; 48 } 49 50 //传入n,i表示第n行的第i个,返回其值,递归的方法求解 51 private static int cal(int n, int i){ 52 if(i > n){ 53 return cal(n,2*n-i) ; 54 } 55 56 if(n == 2 && i > 0){ 57 return 1 ; 58 } 59 60 if(i == 1){ 61 return 1 ; 62 } 63 64 if(i <= 0){ 65 return 0 ; 66 } 67 68 int res = cal(n-1,i) + cal(n-1,i-1) + cal(n-1,i-2) ; 69 70 return res ; 71 } 72 73 }
时间: 2024-10-10 23:18:04