兔子c语言函数 c语言狼与兔子问题函数调用

C语言:求兔子总数。

早就超出了unsigned int可以表示的范围!

临桂网站建设公司成都创新互联,临桂网站设计制作,有大型网站制作公司丰富经验。已为临桂上千家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的临桂做网站的公司定做!

这个题目的答案公式是:2^n,即2的n次幂。

在tc下,无符号整型数unsigned int的表示范围是0~(2^16-1)

在vc++中,无符号整型数unsigned int的表示范围是0~(2^32-1)

所以当n=32时,2^32产生向更高位的进位,但是向高位产生的进位不能保存,因为超过了无符号整型数unsigned int的表示范围。好比m是一个一位正整数,现在m=9,然后m++,得m=10但是m只能保存一位整数,所以m=0,向高位产生的进位1没法保存被丢弃。其实这就是模(mod或者用符号表示就是%)的意思。

C语言递归的方法:有一对兔子,从出生后第3个月起每个月都生一对兔子的问题

可以考虑递归算法:

int Amount(int day)

{

if (day==10)

{

return 1;

}

else

{

return 2*(Amount(day-1)+1);

}

}

早说嘛。。。害的白写了个。。

这题可以多用几个递归函数解决,在这里我称不能生育的兔子为小兔,能生育的为大兔

int littleR(int month)

{

if (month==1)

return 0;

else

return bigR(month-1)+little(month-1);

}

int bigR(int month)

{

if (month==1)

{

return 1;

}

else if (month==2)

{

return 1;

}

else if (month==3)

{

return 1;

}

else

{

return bigR(month-1)+little(month-2);

}

}

int totalR(int month)

{

return littleR(month)+bigR(month);

}

注:这种增长速度的话很快兔子的数量就会增长到很大,所以如果month达到几十的话就会超过int范围,所以可以考虑用__int64代替int,另外到时候如果依然每次都递归的话运行速度也会变慢,可能要好几秒,好几分钟,甚至更长的时间才能算出结果,所以可以考虑用数组存每个递归函数算出的值,如:

littleR(int month)中else可写成

if (...)

{

...

}

else

{

if (a[month]!=0)

return month;

else

return a[month]=bigR(month-1)+little(month-1);

}

用这种方法可以适当提高运行速度。。。

c语言编程,求兔子问题。

因为只有6年,定义一个数组存储第n年各岁兔子的数量

#includestdio.h

int sum(int n)

{

int i,j,a[6];

a[0]=1; //初始化,第一年只有1对,都是1岁

for(i=1; i 6; i++)

a[i] = 0; //初始化,第一年只有1对,其余为0

for(i=1; i n; i++)

{//第n年x岁的兔子数是第n-1年x-1岁兔子的数量

// a[x] a[x-1]

for(j=5;j0;j--)

a[j] = a[j-1];//7岁的就会死掉,直接丢弃

//到3岁就可以生一对,所以从3(数组从0开始,故这里是2)加到6

a[0] = a[2] + a[3] + a[4] + a[5];

}

return (a[0] + a[1] + a[2] + a[3] + a[4] + a[5]);

}

void main()

{

int i=1;

for(i=1; i 25; i++)

{

printf("%-3d", i);

printf(":%5d\n", sum(i));

}

}

c语言题老师留的 兔子繁殖问题,用递归函数的方法做。 个位大神编一个然后写下答案请写上兔子多少只

//兔子的对数,就是Fibonacci数列

//1 1 2 3 5 8 13 21 34 55 89 ...

#include stdio.h

int f(int n)

{

if(n  3)

return 1;

else

return f(n - 2) + f(n - 1);

}

void main()

{

int n;

scanf("%d", n);

printf("%d年后,有兔子%d只.\n", n, f(n));

}

C语言编程:兔子繁殖问题

思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是

long fun(int month)

{

if(month == 1 || month == 2)

return 1;

else

return fun(month - 1) + fun(month -2);

}

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。

int main()

int Mon;

long Num;

scanf("%d",Mon);

Num = fun(Mon);

printf("第%d月共有兔子%ld只\n",Mon,Num); 

return 0; 

}

至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的

c语言兔子

那个i用来实现循环累加

这个其实就是Fibonacci数列的应用。

f(1)=f(2)=1 (i=1或者i=2)

f(i)=f(i-1)+f(i-2) (i2)

附 几种求Fibonacci数列前20位的方法

#includestdio.h

int function(int n);

int main()

{

int i;

for(i=1;i=20;i++)

printf("%d ",function(i));

printf("\n");

return 0;

}

int function(int n)

{

if(n==1||n==2)return 1;

else return function(n-1)+function(n-2);

}

********************************************************************************

#includestdio.h

int main()

{

int i,a[20];

for(i=0;i20;i++)

{

if(i==0||i==1)a[i]=1;

else a[i]=a[i-1]+a[i-2];

printf("%d ",a[i]);

}

printf("\n");

return 0;

}

********************************************************************************

#include stdio.h

int main()

{

int n;

int fn;

for(n=1;n21;n++)

{

switch(n)

{

case 1:{fn=1;break;}

case 2:{fn=1;break;}

default:

{

int a=1,b=1,i,j;

for(i=3;i=n;i++)

{

j=a+b;

a=b;

b=j;

}

fn=j;

}

}

printf("%d ",fn);

}

return 0;

}


文章名称:兔子c语言函数 c语言狼与兔子问题函数调用
文章地址:http://azwzsj.com/article/dooiooi.html