当前位置:首页 » 编程语言 » c语言兔子

c语言兔子

发布时间: 2025-09-10 03:05:49

‘壹’ c语言100道题中,兔子生兔子程序怎么理解

有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

兔子的规律为数列:

1,1,2,3,5,8,13,21....


下面使用了迭代、递归和数组三种解法。

【代码一】使用迭代:

#include<stdio.h>
intmain()
{
longf1=1,f2=1;//兔子的数量
inti;//循环次数
intn;//要计算的月份

printf("输入要计算的月数:");
scanf("%d",&n);

//计算出循环次数
if(n%2==1){
n=(n+1)/2;
}else{
n=n/2;
}

for(i=1;i<=n;i++){
printf("第%d个月有%d只 ",i*2-1,f1);
printf("第%d个月有%d只 ",i*2,f2);

f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
return0;
}

运行结果:

输入要计算的月数:10
第1个月有1只
第2个月有1只
第3个月有2只
第4个月有3只
第5个月有5只
第6个月有8只
第7个月有13只
第8个月有21只
第9个月有34只
第10个月有55只

【方法二】使用递归:

#include<stdio.h>
intFeibonacci(intn){
if(n==1||n==2)
return1;
else
returnFeibonacci(n-1)+Feibonacci(n-2);
}
intmain(){
intn;//要计算的月份

printf("输入要计算的月数:");
scanf("%d",&n);

printf("%d个月的兔子总数为%d ",n,Feibonacci(n));

return0;
}


运行结果:

输入要计算的月数:10
10个月的兔子总数为55


递归看上去非常符合逻辑,但是这种递归效率是非常慢的,不信你计算20, 30, 40 个月的兔子数试试,明显比另外两种方法慢多了,具体分析请看:C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

【代码三】使用数组

#include<stdio.h>
voidmain()
{
inta[100],i,n;

printf("请输入月数:");
scanf("%d",&n);

a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];

printf("第%d个月的兔子为:%d ",n,a[n-1]);
}

运行结果:

请输入月数:10
第10个月的兔子为:55

‘贰’ C语言编程 兔子鸽子问题

判断error的情况有问题。其实这题列出公式就可以解答了:
设x只鸽子,已知兔子,则:
x+y=n;
2x+4y=m;
解得:x=2n-m/2,y=m/2-n。

因为x,y都是非负整数,所以 m/2 必须是一个整数,也就是m必须是偶数。同时:
x=2n-m/2>=0,解得4n>=m;
y=m/2-n>=0,解得m>=2n;
因此 2n<=m<=4n,且m是偶数。这就是判断是否“Error”的条件。

#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int n,m;
while(scanf("%d%d",&n,&m)&&!(m==0&&n==0))
{
if(m%2!=0 || m<2*n || m>4*n)
printf("Error\n");
else
printf("%d %d\n",(2*n-m/2),(m/2-n));
}
return 0;
}

‘叁’ C语言 兔子的繁殖问题(注意,就是按题目样例要求输入然后输出,要一样)

#include<stdio.h>

int main()
{
int a[50];
int i,t,n;
a[0]=1;
a[1]=1;
for(i=2;i<50;i++)
a[i]=a[i-1]+a[i-2];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}

‘肆’ c语言:兔子繁殖问题

兔子的对数,就是Fibonacci数列
#include <stdio.h>
long f(long n)
{
if(n<3) return 1;
else return f(n-2)+f(n-1);
}
void main()
{
printf("一年后,有兔子%ld对.\n", f(12));
getch();
}
---------------------------------------------------------
1 1 2 3 5 8 13 21 34 55 89 ...

‘伍’ 兔子繁殖,C语言

#include<stdio.h>
intmain(void)
{
intn,i,a,b,c;
a=0;
b=1;
i=1;
printf("请输入兔子对数n=");
scanf("%d",&n);
while(b<n){
c=a+b;/*while里面一次循环是1个月*/
a=b;
b=c;
i++;
}
printf("至少%d月",i);
return0;
}

热点内容
ipadmini还原密码多少 发布:2025-09-10 08:00:37 浏览:160
易语言有了源码 发布:2025-09-10 07:53:57 浏览:240
标准C语言基础教程 发布:2025-09-10 07:36:15 浏览:515
a股换算法 发布:2025-09-10 07:29:18 浏览:193
编译器内存 发布:2025-09-10 07:27:44 浏览:375
androiduuid生成 发布:2025-09-10 07:15:33 浏览:518
手机清理无用缓存的文件 发布:2025-09-10 06:45:31 浏览:760
幼儿c语言 发布:2025-09-10 06:39:46 浏览:734
a汇编程序 发布:2025-09-10 06:33:53 浏览:313
数据库的代码写在哪里 发布:2025-09-10 06:11:33 浏览:204