黑马程序员技术交流社区
标题:
JAVA趣味小程序之羊群问题
[打印本页]
作者:
雨山
时间:
2015-11-5 00:41
标题:
JAVA趣味小程序之羊群问题
【如有问题请指教】
假设一个羊群里面有一只羊,羊每年会生一只小羊(没有公母区别),但是一只羊只能活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();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2