當前位置:首頁 » 編程語言 » c語言中枚舉法解決雞兔同籠
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中枚舉法解決雞兔同籠

發布時間: 2022-06-25 19:53:09

『壹』 關於雞兔同籠的解決問題用方法

說起「雞兔同籠」就要說起1500年前的《孫子算經》裡面的經典題目(傳到日本變成了」龜鶴問題「),我們就從這道題目入手,書中是這樣敘述的:「今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?」這四句話的意思是:有若干只雞兔同在一個籠子里,從上面數,有35個頭;從下面數,有94隻腳.求籠中各有幾只雞和兔?


解決「雞兔同籠」問題的第一種方法:枚舉法(列表法)。

方法很簡單過程很復雜,就是根據不斷變化雞和兔的數量,分別把雞和兔子的腿的的數量填入表格中,知道找到正確的答案為止,這種方法只適合與課堂教學中的探索和對其他方法的引導,由於這種方法太過笨拙,用時較多,在日常的練習和考試中一般不適用。所以這種方法大家了解即可。


解決「雞兔同籠」問題的第二種方法:假設法(矛盾法)。

這種解決「雞兔同籠」問題的主要解決方法之一,該方法主要是根據題目當中的已知條件,對題目進行某種假設,然後按照條件進行推理,找到與題目數量的矛盾之處,最後進行合理的變化從而得出正確的結論。同時呢,假設法也是奧數題目中經常遇到的方法(這里僅對於雞兔同籠問題進行講解,其他問題的假設法這里暫時不再贅述),這種方法關鍵是——通過假設找到與題目中的數量出現的矛盾之處。

我們首先看題目:有若干只雞兔同在一個籠子里,從上面數,有35個頭;從下面數,有94隻腳。求籠中各有幾只雞和兔?

思考過程:假設籠子裡面35隻全是兔子的話,那麼腳的總數應該是:35×4=140(只),但是實際籠子里只有94隻腳,這就與我們假設的出現矛盾了,多出了140-94=46隻腳,為什麼會多出46隻腳呢?因為籠子里不全是兔子還有雞,我們把兩只腳的雞假設成了兔子(現實中一隻兔子比一隻雞多兩只腳),由於我們的假設而多出了46隻腳,多2條腿就有1隻雞,那麼多出的46隻腿當中有多少個2,就有多少只雞,我們就用46÷2=23(只),求出了雞的數量,再用35-23=12(只)得出兔子的數量。

我們總結算式:雞的數量=(35×4-94)÷(4-2)=23(只)

兔子的數量=35-23=12(只)

歸納公式:如果假設全是兔子:(總頭數×一隻兔子腳的數量-總腳數)÷(一隻兔子腳的數量-一隻雞的腳的數量)

當然,我們還可以假設籠子里全是雞,如果全是雞,腳的總數是35×2=70(只)腳,與實際少了94-70=24(只)腳,由於一直雞比一隻兔子少兩只腳,每少兩只腳就有一隻兔子,少24隻腳就有:24÷2=12(只)兔子,算出兔子數量,雞的數量就是:35-12=23(只)。

列出算式:兔子的數量=(94-35×2)÷(4-2)=12(只)

雞的數量=35-12=23(只)

歸納公式:如果假設全是雞:(總腳數-總頭數×一隻雞腳的數量)÷(一隻兔子腳的數量-一隻雞的腳的數量)

『貳』 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;

}

(2)c語言中枚舉法解決雞兔同籠擴展閱讀:

雞兔同籠解題思路:如果先假設它們全是雞,於是根據雞兔的總數就可以算出在假設下共有幾只腳,把這樣得到的腳數與題中給出的腳數相比較,看看差多少,每差2隻腳就說明有1隻兔,將所差的腳數除以2,就可以算出共有多少只兔。

概括起來,解雞兔同籠題的基本關系式是:兔數=(實際腳數-每隻雞腳數×雞兔總數)÷(每隻兔子腳數-每隻雞腳數)。類似地,也可以假設全是兔子。

『叄』 雞兔同籠的問題 c語言怎麼樣編寫

輸入說明:
輸入為兩個正整數,第一個為
M
的值,第二個為
N
的值,用空格分隔。
輸出說明:
若有解,輸出兩個整數,用空格分隔,第一個代表雞的只數,第一個代表兔子的只數;若無解,直接輸出一個
0。
演算法:以列舉法寫程序,讓計算機從雞為0開始執行計算,利用循環語句計算大量次數後,得出最終結果。
具體程序為:
#include
int
main()
{int
chicken,rabbit;//雞,兔子
int
M,N;//頭,腳
printf("M=,N=");
scanf("%d
%d",&M,&N);
for(chicken=0;chicken<=M;chicken++)//雞的數量從0到總頭數M嘗試
{if(chicken*2+rabbit*4==N)//如果總腳數與輸入的總腳數相同
{printf("%d
%d",chicken,rabbit);//分別輸出雞、兔
return
0;//停止程序}}//for執行完表示找不到
printf("0");return
0;}
(3)c語言中枚舉法解決雞兔同籠擴展閱讀:
雞兔同籠問題演算法有很多種,編寫出的程序不盡相同。下面列舉幾種演算法,編寫程序會更為簡單一些。
有若干只雞兔同在一個籠子里,從上面數,有35個頭,從下面數,有94隻腳。問籠中各有多少只雞和兔?
(1)假設全是雞:2×35=70(只),雞腳比總腳數少:94-70=24
(只)
兔子比雞多的腳數:4-2=2(只),兔子的只數:24÷2=12
(只),雞的只數:35-12=23(只)
假設全是兔子:4×35=140(只),兔子腳比總數多:140-94=46(只)
兔子比雞多的腳數:4-2=2(只),雞的只數:46÷2=23(只),兔子的只數:=35-23=12(只)(2)設雞有x只,兔有y只。
解得
參考資料:雞兔同籠(一種數學奧數題目)_網路

『肆』 c語言解決雞兔同籠問題

多次修改後面有個精減版的
#include

void
main(
)
{
int
ret
=
0;
//
表示最後一個printf的返回值
while(1)
{
int
h,f,c,r;
printf("請輸入頭的數目:");
scanf("%d",&h);
printf("\n請輸入腳的數目(必須為偶數):");
scanf("%d",&f);
while(f%2!=0
&&
f
!=
0
)
//加上一個輸入0值繼續的條件,這里的while
循環可以不要了,後面的兩個循環,再加上if的判斷條件,已經解決了這里不為偶數的問題(個人認為,驗證過了)
{
printf("\n輸入腳的數目為奇數,請重新輸入腳的數目(必須偶數):");
scanf("%d",&f);
}
while(f<2*h
&&
h!=
0)//同上
{
printf("\n輸入腳的數目過小,請輸入腳的數目(必須偶數):");
scanf("%d",&f);
/*
在這里加上
if(
f
%2
!=
0)
continue;
*/
/*作用是輸入的不是偶數,就要重新輸入
*/
}
while(f>4*h&&h!=0)//同上
{
printf("\n輸入腳的數目過大,請輸入腳的數目(必須偶數):");
scanf("%d",&f);
/
*
if(
f
%
2
!=
0)
continue;
*/
/*作用同上*/
}
for(c=0;c<=h;c++)
for(r=1;r<=h;r++)
//這句改成:for(r=0;
r
<=
h-c;
r++)好點,減少的循環的次數,加了效率
{
if(c+r==h&&2*c+4*r==f)
ret
=
printf("\n雞的數目為%d,兔子的數目為%d\n\n",c,r);
}
if(
ret
==
39)
/*作用是輸入一次成功後,結束大循環,
可以不要*/
break;
}
}
/***********************************************************************/
#include

void
main(
)
{
int
ret
=
0;
//
表示最後一個printf的返回值
while(1)
{
int
h,f,c,r;
printf("請輸入頭的數目:");
scanf("%d",&h);
printf("\n請輸入腳的數目(必須為偶數):");
scanf("%d",&f);
while(f%2!=0
&&
f
!=
0
&&
h
!=
0)
//這里的不等於的條件可以不加
{
printf("\n輸入腳的數目為奇數,請重新輸入腳的數目(必須偶數):");
scanf("%d",&f);
if(
f
>
4h
||
f
<
2h)
continue;
}
for(c=0;c<=h;c++)
for(r=1;r<=h;r++)
//這句改成:for(r=0;
r
<=
h-c;
r++)好點,減少的循環的次數,加了效率
{
if(c+r==h&&2*c+4*r==f)
ret
=
printf("\n雞的數目為%d,兔子的數目為%d\n\n",c,r);
}
if(
ret
==
39)
/*作用是輸入一次成功後,結束大循環,
可以不要*/
break;
}
}

『伍』 c語言編程算雞兔同籠

#include <stdio.h>

#include <windows.h>

main()

{ unsigned long int a,b,c,d;

printf("這是一個用於算雞兔同籠的小程序(僅能輸入整數,使用回車鍵切換) 請輸入雞兔的總數");

scanf("%d",&a);

printf(" 請輸入雞兔腳的總數");

scanf("%d",&b);

c=(4*a-b)/2; // 雞的數目

d=a-c; // 兔的數目

if(c*2+d*4==b) printf("雞有%ld只 兔有%ld只",c,d); // c和d反了

else printf("同學,我看你給的數有錯吧!");

Sleep(100000000)。

『陸』 C語言編寫雞兔同籠的問題

#include<stdio.h>
int main()
{
int a,b,M,N;
printf("請輸入雞兔的總頭數\n");
scanf_s("%d",&a);
printf("請輸入雞兔的總腿數\n");
scanf_s("%d",&b);
scanf_s("%d",&M);
M=(2*a)-(b/2);
printf("雞的數目為%d只");
scanf_s("%d",&N);
N=(b/2)-(a);
printf("兔的數目為%d只");
return 0;
}
我目前是C語言的新手,目前只會做這一類。如果用的是VS(visual studio)編程的話,scanf後必須加_s,這是VS獨有的,其他的編程軟體隨意。

『柒』 想用c語言解答雞兔同籠,怎麼做

代碼和運行實況見圖:

『捌』 C語言雞兔同籠問題

數組定義錯誤。C語言中不能像這樣定義變數a,然後定義數組m[a]。這個錯誤導致了你程序運算的錯誤。

修改方法:int m[a],n[a];改為int m[100],n[100];
即不要用變數a,而用一個常數。只要保證輸入的a不大於100就可以了。
如果想用變數作為數組的界限長度,要用到動態數組,不能用你現在的這種方法。

『玖』 用C語言窮舉法編寫雞兔同籠

#包括中
無效的主要()
{
整數雞,兔;
的printf(「雞\噸兔\
N」的);
的(雞=
0;雞<=
35;雞+
+)
{
兔子=
35
-
雞;
如果(8
*兔肉+
2
*雞==
94)的printf(「%d個\
T%D
\
N」的,雞,兔);

『拾』 用C語言編寫雞兔同籠問題

#include
<stdio.h>
void
main(
)
{
int
ret
=
0;
//
表示最後一個printf的返回值
while(1)
{
int
h,f,c,r;
printf("請輸入頭的數目:");
scanf("%d",&h);
printf("\n請輸入腳的數目(必須為偶數):");
scanf("%d",&f);
while(f%2!=0
&&
f
!=
0
&&
h
!=
0)
//這里的不等於的條件可以不加
{
printf("\n輸入腳的數目為奇數,請重新輸入腳的數目(必須偶數):");
scanf("%d",&f);
if(
f
>
4h
||
f
<
2h)
continue;
}
for(c=0;c<=h;c++)
for(r=1;r<=h;r++)
//這句改成:for(r=0;
r
<=
h-c;
r++)好點,減少的循環的次數,加了效率
{
if(c+r==h&&2*c+4*r==f)
ret
=
printf("\n雞的數目為%d,兔子的數目為%d\n\n",c,r);
}
if(
ret
==
39)
/*作用是輸入一次成功後,結束大循環,
可以不要*/
break;
}
}