- import java.util.Scanner;
- class TestSum
- {
- public static void main(String[] args)
- {
- Scanner in = new Scanner(System.in);
- //向系统中输入任意一个年数,并赋值给变量n
- System.out.println("请输入一个年数:");
- int n = in.nextInt();
- //打印输入的年数所对应的牛的总头数
- System.out.println("到第"+n+"年,总共有牛"+getSum(n)+"头");
- }
- //此方法用来计算所输入年数的总的牛头数
- public static int getSum(int year)
- {
- //当输入的年数小于零时,返回-1,表示输入有误。
- if(year<0)
- {
- System.out.println("输入的数据不符合要求!");
- return -1;
- }
- //当输入的年数小于或者等于3时,返回1.因为又题意可知,三年以后,才会有新的牛出生;因此,此时牛的总头数为1.
- else if(year<=3)
- return 1;
- //下面是年数大于3的情况
- else
- {
- //最开始时,有一头牛,所以总数sum初始化为1
- int sum = 1;
- //定义一个数组来存放每一年新出生的牛,因为从第四年开始才有新牛出生,所以此数组中存储的第一个元素是从第四年开始的,
- //也即数组的长度为year-3(因为数组角标是从0开始的)。
- int[] arr = new int[year-3];
- for(int i=0;i<arr.length;i++)
- {
- //因为是每一头牛都在三年后生产一头小牛,并且以后此牛会每一年生一头小牛;故从第四年起,
- //每一年出生的小牛数都等于上一年出生的小牛数加上三年前的那一年出生的小牛数
- //(如:第七年出生的小牛数=第六年出生的小牛数+第四年出生的小牛数).这一步很关键!!!
- if(i>=3)
- arr[i] = arr[i-1]+ arr[i-3];
- //当年数为4、5、6时,每年只有一头牛出生
- else
- arr[i]= 1;
- //将每一年的牛数叠加起来
- sum += arr[i];
- }
-
- //返回输入年数所对应的总牛数
- return sum;
- }
- }
- }
复制代码 请问一下,我写的这个对吗? |