当前位置:首页 » 编程语言 » c语言如何用迭代算法求兔子数量
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言如何用迭代算法求兔子数量

发布时间: 2023-06-27 08:14:17

A. c语言编程题目 兔子繁衍问题

方法一、用递归。

方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表。每次循环遍历所有节点的计时变量大于3的就新建一个节点插入链表。最后统计节点数量。

我用方法1来写:

#include <stdio.h>

int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数


{


int cnt=0,n=bMth,num=2;


while(n++<gMth+1)


if(cnt++>2)


num=num+childbirth(n,gMth+1);


return num;


}

int main()


{


int i,n;


printf("请输入经过多少月:"),scanf("%d",&n);


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


printf("经过%d个月后:兔子数量为:%d ",i,childbirth(0,i));


return 0;


}

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

如图,此题难度较大,要用到队列(我优化为循环队列)(此题有两个提问,都是我回答所以一样)

#include<stdio.h>
#defineLIFETIME13 //兔子寿命,单位半年(年龄小于此!)
#defineINITNUM1 //初始兔子有多少对
main()
{
inthY=0; //兔子历(就是时刻表):单位:半年
intnum[LIFETIME]={INITNUM,0}; //存储不同年龄兔子的对数(初始为0岁1对)
//babyI下标代表0岁,往前年龄增大,越过数组下界跳到上界,所以babyI+1反而是最老兔子
intbabyI=0; //0岁兔子对应下标,年龄单位为半年
intloveNum=0; //可生育兔子数量
inttotalNum=INITNUM; //总计兔子数量
intage1I=LIFETIME-2; //1岁兔子对应下标(开始能生育)
intage5_5I=LIFETIME-11; //1岁、5.5岁兔子对应下标(刚好能生育、刚好不能生育年龄)
intn=30; //输入n半年后!
while(hY<=n){
inti,j; //遍历临时变量。①展示兔子数量。
printf("第%.1f年 总计:%d对 可生育:%d对 ",(float)hY/2,totalNum,loveNum);
/*
for(i=0;i<LIFETIME;i++){
printf("%.1f岁 ",(float)i/2); //打印表头
//printf("%d,%.1f岁 ",i,(float)(++i)/2); //打印表头
}printf("单位:对 "); //换行*/
i=babyI; //显示各年龄对应数量
j=0;
do{
//printf("%d ",num[i]);
if(hY<21){ //仅用于加 显示
if((++j)%2==0)printf(" ");}
printf("%d",num[i]);
if(i>0)i--; //下标循环往左移动
elsei=LIFETIME-1;
}while(i!=babyI);
printf(" "); //换行

//②半年后
hY++; //时间过去半年
age1I=(age1I+1)%LIFETIME; //1岁数量(对)对应下标
age5_5I=(age5_5I+1)%LIFETIME;//5.5岁数量(对)对应下标
//printf("%d,%d ",age1I,age5_5I);
loveNum+=num[age1I]-num[age5_5I]; //可生育兔子数量(对)

babyI=(babyI+1)%LIFETIME; //新babyI设为原最老兔子的下标,
totalNum+=loveNum-num[babyI]; //每对大兔子可以生一对小兔子-死亡的老兔
num[babyI]=loveNum; //老兔的位置换成新兔
}
}

C. 如何用c语言编写鸡兔同笼的正确答案,已知有40个头 100只脚求鸡多少只兔子多少只 求解求解

intmain(void)
{
intnJi;
intnTu;
intnHead=0;
intnFoot=0;

//已知条件可知道,如果全是鸡的话,要50只才能凑足100只脚
//全是兔的话,需要40只才能凑足40个头,
//即鸡小于50只,兔小于40只
for(nJi=0;nJi<50;nJi++){
for(nTu=0;nTu<40;nTu++){
nHead=nJi+nTu;
nFoot=nJi*2+nTu*4;
//所以
if((40==nHead)&&(100==nFoot)){
printf("theJiCnt=%d,theTuCnt=%d. ",nJi,nTu);
}
}
}

return0;
}
///输出30
theJiCnt=30,theTuCnt=10.

D. 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

E. c语言编程:鸡兔同笼:已知鸡和兔的总数量为n,总腿数为m,输入n和m,输出兔的数目。如果无解,

第一题的话我给你个高效率的算法吧,思想很简单,但略微奇葩了点,通过所有动物减去两只脚,剩下兔子还剩两只脚,来计算兔子数,然后也能得出鸡的数量,这个你看看吧:
#include<stdio.h>
main()
{
//为了你能简单的看懂,按照你给出的变量定义,并分开定义
int n; //总数量
int m;//总腿数
int sumt=0;//兔子的数量
int sumj=0;//鸡的数量
int sum=0;
printf("输入总数量:");
scanf("%d",&n);
printf("输入总腿数:");
scanf("%d",&m);
sumt=(m-2*n)/2;
sumj=n-sumt;
sum=sumt*4+sumj*2;
if(sum!=m || sumt<0 || sumj<0)
{
printf("no answer\n");
}
else
{
printf("鸡的数量%d,兔子的数量%d\n",sumj,sumt);
}

}
第二题就简单点吧,看注释:
#include<stdio.h>
main()
{
int a[3],k,i,j;
printf("输入第一个数:");
scanf("%d",&a[0]);
printf("输入第二个数:");
scanf("%d",&a[1]);
printf("输入第三个数:");
scanf("%d",&a[2]);
//这样子输入方便你理解,也可以这样解决 scanf("%d%d%d",&a[0],&a[1],&a[2]);
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
//这样循环的话效率低,但好在容易理解,也能解决int类型数量里面的数,多少个都成,但那时候不确定的话输入输出就要循环了
printf("%d>%d>%d/n",a[0],a[1],a[2]);
}

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

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

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

#include<stdio.h>
intf(intn)
{
if(n<3)
return1;
else
returnf(n-2)+f(n-1);
}
voidmain()
{
intn;
scanf("%d",&n);
printf("%d年后,有兔子%d只. ",n,f(n));
}