當前位置:首頁 » 編程語言 » 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));
}