【如有问题请指教】
假设一个羊群里面有一只羊,羊每年会生一只小羊(没有公母区别),但是一只羊只能活7年,第八年就死掉了,请问20年后羊圈里有多少只羊?
- package com.heima.test;
- public class YangHui {
- /**
- * 分析:第一年羊数为1(其实第一年应该两个)
- * 第二年羊数为2,第三年羊数为4,以此类推第七年羊数为64,当第八年第一年的羊死了
- * 第九年第二年的羊死了,以此类推
- * 可以建立杨辉三角模型:
- * 1年 1
- * 2年 1 1
- * 3年 1 2 1
- * 4年 1 3 3 1
- * 5年 1 4 6 4 1
- * . .
- * . .
- * . . - 每年死的羊数
- * 8年 . - 1 *1 = 1
- * 9年 . - 1 1 *2 = 1 * 2 + 2
- * 10年 . - 1 2 1 *3 = 4 * 2 + 4
- * 11年 . - 1 3 3 1 *4 = 12 * 2 + 8
- * 思路:1,建立杨辉三角,返回第N年的羊数
- * 2,用第20年的羊数减去13年的羊数*13
- */
- public static void main(String[] args) {
- int sheep = yangHui(2);
- System.out.println(sheep);
- }
-
- //方法功能 产生杨辉三角 返回实际第year年的羊数
- //返回值类型 int
- //参数列表 int year
- public static int yangHui(int year) {
- int[][] arr = new int[year + 1][year + 1];
- for (int i = 0; i < year + 1; i++) {
- arr[i][0] = 1;
- arr[i][i] = 1;
- }
-
- for (int i = 2; i < arr.length; i++) {
- for (int j = 1; j < i; j++) {
- arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
- }
- }
-
- printArray(arr);
- int temp = sheep(arr,year); //计算第year年的羊数
- if(year < 8) {
- return temp;
- }else {
- int temp1 = sheep(arr,year - 7) * (year - 7);
- return temp - temp1;
- }
- }
-
- //方法功能 返回第year年羊数
- //返回值类型 int
- //参数列表 int[] arr,year
- public static int sheep(int[][] arr,int year) {
- int sum = 0;
- for (int i = 0; i < arr[year].length; i++) {
- sum = sum + arr[year][i];
- }
- return sum;
- }
-
- //方法功能 遍历数组
- //返回值类型 void
- //参数列表 int[] arr
- public static void printArray(int[][] arr) {
- for (int i = 0; i < arr.length; i++) {
- for (int j = 0; j < arr[i].length; j++) {
- System.out.print(arr[i][j] + " ");
- }
- System.out.println();
- }
- }
- }
复制代码 |
|