A. 如何用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.
B. C語言問題,這個代碼功能是怎麼實現的,幫我解釋下這個代碼
你圖中的代碼不對,題目明明說了3個月後開始生,你這代碼x明顯是總對數,月份從1開始,帶入這個代碼,先不管別的,第一次循環結束(也就是第二個月)x就是2對了。兔子剛出生1個月就生。
我寫得話,用一個數組做成長隊列,數組最後一個元素才是可以生育的兔子對數。下面是演示代碼(我理解題目說的「3月後開始生」,就是第4個月生,如你認為第3個月就開始生,自行修改常量即可):
代碼輸出兔子成長繁殖過程,常量包括初始兔子數量,繁殖增量,繁殖周期,可自行修改。
思路:代碼中變數數組x,每個元素分別對應:新生兔子數,1個月大的兔子數,2個月大的兔子數,3個月大的兔子數。每經過一個月數組前一個元素值會累加到後一個元素值表示成長,同時最後一個元素值就是生育的兔子,生育出的新生兔會放在第一個元素中,如此循環。變數cnt是累計總數。所有數值單位是對。
#include <stdio.h>
#define N 1
#define M 3//出生幾個月後開始生
#define RN 1//每對兔子每月生出對數
int main()
{
int n,i,cnt=N,x[M+1]={0},month=1;
x[0]=cnt;
do
printf("請輸入期望多少對兔子:"),scanf("%d",&n);
while(n>10000);
printf("第1個月,有新生兔子%d對 ",x[0]);
while(1)
{
month++;
for(i=M;i>0;i--)
x[i]+=x[i-1],x[i-1]=0;//未超3個月的兔子成長一個月
x[0]=x[M]*RN;//新當月出生的兔子進入成長隊列
for(i=0,cnt=0;i<=M;cnt+=x[i],i++);//統計兔子總數(單位:對)
printf("第%d個月,新生%d對,1個月大的%d對,2個月的%d對,3個月的%d對,共計%d對兔子 ",month,x[0],x[1],x[2],x
[3],cnt);
if(cnt>=n) break;
}
return 0;
}
C. 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
D. 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;
}
E. C語言編程雞兔同籠
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d;
a=35,b=94;
c=2*a-b/2;
d=b/2-a;
cout<<"c="<<c<<"d="<<d<<endl;
return 0;
}
拓展資料
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
F. C語言中雞兔同籠問題的代碼
#include<stdio.h>
voidmain()
{inta,b,c,d;
printf("這是一個用於算雞兔同籠的小程序 請輸入雞兔的總數");
scanf("%d",&a);
if(a>=0)
{
printf(" 請輸入雞兔腳的總數");
scanf("%d",&b);
if(b%2==1)
printf("腳的數量出現奇數,真奇怪啊! ");
elseif(b<=a*4&&b>=a*2)
{
c=(4*a-b)/2;//雞的數目
d=a-c;//兔的數目
if(c*2+d*4==b)
printf("雞有%ld只 兔有%ld只 ",c,d);//c和d反了
else
printf("這個真難,計算機也沒法算! ");
}
else
printf("輸入雞兔腳的數量范圍不正確,正確的范圍是%d--%d! ",a*2,a*4);
}
else
printf("數量不能為負! ");
}
G. c語言演算法,雞兔同籠
已知雞和兔的總數量為n,總腿數為m,輸入n和m,依次輸出雞的數目和兔的數目。如果無解則輸出No answer。
輸入:
兩個整數b和m,如上所述。
輸出:
雞的數目和兔的數目。
我們假設a = 雞只數,b = 兔只數(兔的腳數×總只數-總腳數)÷(兔的腳數-雞的腳數)=雞的只數,a = ( 4*n - m )/2。
總只數-雞的只數=兔的只數,b = n - a。
具體代碼:
#include "stdio.h"
int main() {
int a,b,n, m;
// a雞的數量
// b兔的數量
// n雞兔總數
// m總腳數
scanf("%d %d", &n,&m);
a = (4 * n - m) / 2;//算出雞的數量
b = n - a;//算出兔的數量
if (a <= 0 || b <= 0) {
//結果小於等於0,答案不成立,無解
printf("No answer");
} else {
//結果大於0
printf("%d %d", a, b);
}
return 0;
}
(7)c語言中算出大兔小兔的個數擴展閱讀:
雞兔同籠解題思路:如果先假設它們全是雞,於是根據雞兔的總數就可以算出在假設下共有幾只腳,把這樣得到的腳數與題中給出的腳數相比較,看看差多少,每差2隻腳就說明有1隻兔,將所差的腳數除以2,就可以算出共有多少只兔。
概括起來,解雞兔同籠題的基本關系式是:兔數=(實際腳數-每隻雞腳數×雞兔總數)÷(每隻兔子腳數-每隻雞腳數)。類似地,也可以假設全是兔子。
H. 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; //老兔的位置換成新兔
}
}