本帖最后由 coding_wang 于 2015-9-9 23:44 编辑
我就是按照最简单的思路走,大神打脸请轻拍
--------------------------------~翱~翔~的~分~界~线~-----------------------------------------古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
设 第x个月 有可以生小兔子的大兔子N对,有出生一个月的兔子n1对,有出生两个月的兔子n2对 则整个月的兔子总数SUM_x= N+n1+n2; 下个月的兔子数量SUM_x+1 = (N + n2)+ (N + n2) + n1 ;再下个月的数量为:SUM_x+2 = N+n2+n1 + (N+n2)+n1 + (N+n2) = SUM_x + SUM_x+1 ;
#include <stdio.h>
int sumOfRabbits ( int n );
void a11()
{
int n=0;
printf("请输入查询月数:");
scanf("%d",&n);
printf ("第%d个月的兔子总数为: %d对\n",n,sumOfRabbits(n));
}
int sumOfRabbits ( int n)
{
int n3,n1,n2; // n3表示大于等于三个月大的兔子 n1表示出生一个月的兔子 n2 表示出生两个月的兔子
n3=0,n1=1,n2=0;
for(int i=2;i<=n;i++)
{
n3=n3+n2//注意数字的赋值顺序, 这个月的n3会等于上个月的n2 与 n 的和,所以这个月的 n2 不能比这个月的 n3 先赋值
n2=n1; //n赋值后 这个月的n2 会等于上月的n1 所以这个月的n1不能比这个月的n2先赋值
n1=n3; //这个月n1会等于这个月的n3,所以必须等到这个月的 n3 设置后赋值.
}
return (n3+n1+n2);
}
|
|