0
点赞
收藏
分享

微信扫一扫

兔子繁衍问题(暴力枚举+斐波那锲)

陈情雅雅 2022-03-11 阅读 93
算法

1.暴力破解,循环解决

#include<iostream>
using namespace std;
/*一对兔子,从出生后第3个月起每个月都生一对兔子。
小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,
请问第1个月出生的一对兔子,第n个月有多少只兔子?*/ 
// 暴力解法
int main() {
	// 第n个月兔子数 
	int totalNum = 0;
	// 一个月、两个月、三个月(>=3)兔子数目 
	int firstMonth = 2, secondMonth = 0, thirdMonth = 0;
	int n = 0;
	cin >> n;
	// i代表当前月份 
	for(int i=1; i<n; i++) {
		thirdMonth += secondMonth; // 两个月兔子变成三个月,三个月兔子还是处于三个月以上状态 
		int tempFirst = thirdMonth; // 三个月兔子生了小兔子
		secondMonth = firstMonth; // 一个月的兔子变成两个月
		firstMonth = tempFirst; //新生兔子一个月大 
	}
	totalNum = firstMonth + secondMonth + thirdMonth;
	cout<< "第" << n << "个月有" << totalNum << "只兔子" << endl;
	cout<< "1,2,3(>=3)个月个体分别为:" << firstMonth << " " << secondMonth << " " << thirdMonth << endl; 
	return 0;
}

2.斐波那锲

// 斐波那契数列解法 
#include<iostream>
#include<stdio.h>
using namespace std;

int Fei(int n) {
	// 第1,2个月则2只 
	if(n == 1 || n == 2) {
		return 2;
	} else if (n < 1) {
		return 0;
	} else {
		// 成熟兔子数和未成熟兔子数 
		return Fei(n-1) + Fei(n-2);
	}
}
int main() {
	int n;
	while(scanf("%d", &n) != EOF) {
		printf("有%d只兔子\n", Fei(n));
	} 
	return 0;
}

举报

相关推荐

0 条评论