母牛的故事
题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
分析:
第n年 | … | 第n年 | 母牛 |
---|---|---|---|
f[1] | f[1] | 1 | |
f[2] | f[1]+1 | 2 | |
f[3] | f[1] +1+1 | 3 | |
f[4] | 第四年初,f[1]生了f[1]头母牛 | f[4]=f[3]+f[1] | 4 |
f[5] | 第五年初,f[2]生了f[2]头母牛 | f[5]=f[4]+f[2] | 6 |
f[6] | 第六年初,f[3]生了f[3]头母牛 | f[6]=f[5]+f[3] | 9 |
f[7] | 第七年初,f[4]生了f[4]头母牛 | f[7]=f[6]+f[4] | 13 |
f[8] | … | … | … |
f[9] | … | … | … |
– | – |
C语言中实现多组数据输入输出主要有两种方式:
1.首先输入一个n,表示将有n个输入输出,用个while(n–)循环,例如:
#include <stdio.h>
int main()
{
int n,a;
scanf("%d",&n);
while(n--){
scanf("%d",&a);
printf("输出:%d\n",a);
}
return 0;
}
/*
运行结果:
3
255
输出:255
156
输出:156
125
输出:125
*/
2.使用while(scanf("%d",&n)!=EOF){}语句,直到输入ctrl+z,结束输入,例如:
#include <stdio.h>
int main()
{
int a;
while(scanf("%d",&a)!=EOF){
printf("输出:%d\n",a);
}
return 0;
}
/*
运行结果:
54
输出:54
5156
输出:5156
21
输出:21
^ctrl+z
*/
Java语言中实现多组数据输入输出可以用scanner.nextInt()方法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = a + b;
System.out.println(c);
}
}
}
C语言代码如下:
#include<stdio.h>
int main()
{
int i,n,f[56];
while(scanf("%d",&n))
{
f[1]=1;
f[2]=2;
f[3]=3;
if(n==0)
break;
if(n==1)
printf("%d\n",f[1]);
else if(n==2)
printf("%d\n",f[2]);
else if(n==3)
printf("%d\n",f[3]);
else{
for(i=4; i<=n; i++)
{
f[i]=f[i-1]+f[i-3];
}
printf("%d\n",f[n]);
}
}
return 0;
}
Java语言代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] Array = new int[55];
Array[1] = 1;
Array[2] = 2;
Array[3] = 3;
if(n==0){
System.out.println();
}
else if(n==1){
System.out.println(Array[1]);
}
else if(n==2){
System.out.println(Array[2]);
}
else if(n==3){
System.out.println(Array[3]);
}
else {
for(int i=4; i<=n;i++)
{
Array[i]=Array[i-1]+Array[i-3];
}
System.out.println(Array[n]);
}
}
}
}
另附上我第一次在OJ上答案错误的代码,忽略了n==0时的结果:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] Array = new int[55];
Array[1] = 1;
Array[2] = 2;
Array[3] = 3;
if(n==0){
System.out.println();
}
else if(n==1){
System.out.println(Array[1]);
}
else if(n==2){
System.out.println(Array[2]);
}
else if(n==3){
System.out.println(Array[3]);
}
else {
for(int i=4; i<=n;i++)
{
Array[i]=Array[i-1]+Array[i-3];
}
}
System.out.println(Array[n]);
}
}
}