【华为机试052】杨辉三角的变形

题目描述:

             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。

Java实现:

import java.util.Scanner;

public class YangHuiSanJiao {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            System.out.println(getFirstEvenPlace(n));
        }
    }

    private static int getFirstEvenPlace(int n) {
        int[][] map = new int[n + 1][2 * n];
        map[1][1] = 1;
        for (int i = 2; i <= n; i++) {
            map[i][1] = 1;
            for (int j = 2; j <= 2 * i - 1; j++) {
                map[i][j] = map[i - 1][j - 2] + map[i - 1][j - 1] + map[i - 1][j];
            }
        }
        for (int i = 2; i < n; i++) {
            if (map[n][i] % 2 == 0)
                return i;
        }
        return -1;
    }
}

关键点:

  • 二维数组map的第0行和第0列都为0,想象将杨辉三角的数都左对齐
  • 这样下面一行的数等于上面一行同一位置的数及其前面两个数之和
  • 查找第一个偶数时只需要判断前n个即可

猜你喜欢

转载自blog.csdn.net/heyiamcoming/article/details/81064709