杭电OJ2018

#include 
using namespace std;
int main(){//有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛
	int n;
	int m , c[4];//m代表可以生小母牛的母牛,c[1]代表刚生出的小牛,c[2]代表经过一年的小牛,以此类推,分开讨论  
	int temp;
	while(cin >> n){//第n年的时候只算了前面n-1年的情况 
		if(n == 0){
			break;
		}
		else{
			m = 1;
			c[1] = c[2] = c[3]= 0;
			for(int i = 1 ; i <= n - 1 ; i ++){
				/*if(i < 4){  只是这种情况不能判断出,新生出来的小母牛也会再等4年,最好的方法就是将不可以生产的小母牛也分为年龄为几年的 
					c++;
				}*/           
				m = m + c[3];//上一年三岁的小牛在该年已经4岁了,可以生小牛了!!! 所以有下面的c[1]=m 
				c[3] = c[2];
				c[2] = c[1];
				c[1] =m;//所以c[1]=m 
			}
			cout << m + c[1] + c[2] + c[3] << endl;
		}
	}
}
/*本题关键就是分开讨论,最开始只想到分为四年以上的母牛,但发现心生出来的小母牛也会再等4年
 *所以用了数组将四岁以下的小木年统计一下 
 */

你可能感兴趣的:(杭电OJ)