Ⅰ 百元買百雞問題,編程急求
設x、y、z分別代表公雞、母雞、小雞數量。則x不會超過20,y不會超過33,z不會超過100。
有如下兩方程成立:
x+y+z=100
5x+3y+z/3=100
聯立兩方程刪除z得:7x+4y=100
用pascal編的程序如下:
var
x,y,z:byte;
begin
for x:=1 to 20 do for y:=1 to 33 do
if (7*x+4*y=100)and(100-x-y>=0) then begin
z:=100-x-y;
writeln(x:4,y:4,z:4);
end;
readln;
end.
Ⅱ 百錢買百雞用方程式是如何解的,請寫出完整的解決方法,謝謝了。
百錢百雞問題
中國古代數學家張丘建在他的《算經》中提出了著名的「百錢買百雞問題」:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?
*題目分析與演算法設計
設雞翁、雞母、雞雛的個數分別為x,y,z,題意給定共100錢要買百雞,若全買公雞最多買20隻,顯然x的值在0~20之間;同理,y的取值范圍在0~33之間,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此問題可歸結為求這個不定方程的整數解。
由程序設計實現不定方程的求解與手工計算不同。在分析確定方程中未知數變化范圍的前提下,可通過對未知數可變范圍的窮舉,驗證方程在什麼情況下成立,從而得到相應的解。
*程序說明與注釋
#include<stdio.h>
void main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n");
for(x=0;x<=20;x++) /*外層循環控制雞翁數*/
for(y=0;y<=33;y++) /*內層循環控制雞母數y在0~33變化*/
{
z=100-x-y; /*內外層循環控制下,雞雛數z的值受x,y的值的制約*/
if(z%3==0&&5*x+3*y+z/3==100)
/*驗證取z值的合理性及得到一組解的合理性*/
printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
*運行結果
Follwing are possible plans to buy 100 fowls with 100 Yuan.
1:cock=0 hen=25 chicken=75
2:cock=4 hen=18 chicken=78
3:cock=8 hen=11 chicken=81
4:cock=12 hen=4 chicken=84
*總是的進一步討論
這類求解不定方程總理的實現,各層循環的控制變數直接與方程未知數有關,且採用對未知數的取值范上窮舉和組合的方法來復蓋可能得到的全部各組解。能否根據題意更合理的設置循環控制條件來減少這種窮舉和組合的次數,提高程序的執行效率,請讀者考慮
Ⅲ C語言編程「百錢買百雞」問題將數字寫成整數和寫成後面加「.0」怎麼導致不同結果
c/3的值是一個整形,無論c 取什麼值。比如c=1,則c/3=0;若c=5,則c/3=1; 1.0*c/3的值是一個浮點型的,也就是小數,比如c=3,則c/3=1.00,若c=4;則c/3=1.333。 所以在解這道題的時候,用c/3是怎麼好的,應該用1.0*c/3
Ⅳ c語言的百錢買百雞問題。
我國古代數學家張丘建在《算經》一書中曾提出過著名的「百錢買百雞」問題,該問題敘述如下:雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一;百錢買百雞,則翁、母、雛各幾何?
翻譯過來,意思是公雞一個五塊錢,母雞一個三塊錢,小雞三個一塊錢,現在要用一百塊錢買一百隻雞,問公雞、母雞、小雞各多少只?
題目分析
如果用數學的方法解決百錢買百雞問題,可將該問題抽象成方程式組。設公雞x只,母雞y只,小雞z只,得到以下方程式組:
A:5x+3y+1/3z = 100
B:x+y+z = 100
C:0 <= x <= 100
D:0 <= y <= 100
E:0 <= z <= 100
如果用解方程的方式解這道題需要進行多次猜解,計算機的一個優勢就是計算速度特別暴力並且無怨無悔,所以我們可以欺負她、蹂躪她!因此我們用窮舉法的方式來解題,需要101^3次猜解,但對於計算機來說,小CASE!
代碼清單:
#include <stdio.h>int main()
{ int i, j, k;
printf("百元買百雞的問題所有可能的解如下:\n");
for( i=0; i <= 100; i++ )
for( j=0; j <= 100; j++ )
for( k=0; k <= 100; k++ )
{
if( 5*i+3*j+k/3==100 && k%3==0 && i+j+k==100 )
{
printf("公雞 %2d 只,母雞 %2d 只,小雞 %2d 只\n", i, j, k);
}
}
return 0;
}
運行結果:百元買百雞的問題所有可能的解如下:
公雞 0 只,母雞 25 只,小雞 75 只
公雞 4 只,母雞 18 只,小雞 78 只
公雞 8 只,母雞 11 只,小雞 81 只
公雞 12 只,母雞 4 只,小雞 84 只
Ⅳ 求解數學題「百雞問題」
此題就是「百錢買百雞問題」。一般都是用不定方程求解,小學生,甚至初中生都很難弄懂,本文採用「分組」法求解,小學生是可以看懂的。
分析與解 因為100文錢,買100隻雞,所以平均1文錢買1隻雞。每小組4隻雞:其中1隻母雞和3隻小雞,共值4文錢。(因為1隻母雞3文錢,3隻小雞1文錢),恰好是平均1文錢買1隻雞。
每大組7隻雞:其中1隻公雞和6隻小雞。共值7文錢。(因為1隻公雞5文錢,3隻小雞1文錢,6隻小雞2文錢),恰好是平均1文錢買1隻雞。
無論100隻雞共可分成多少個大組和多少個小組,都是平均每1文錢買1隻雞。100隻雞共可分成多少個大組和多少個小組呢?
通過分析試探可發現有以下幾種情況。
①分成4個大組,18個小組。
4個大組中公雞有:1×4=4(只)
4個大組中小雞有:6×4=24(只)
18個小組中母雞有:1×18=18(只)
18個小組中小雞有:3×18=54(只)
這種情況共有公雞4隻,母雞18隻,小雞(24+54=)78(只)。
②分成8個大組,11個小組。
8個大組中公雞有:1×8=8(只)
8個大組中小雞有:6×8=48(只)
11個小組中母雞有:1×11=11(只)
11個小組中小雞有:3×11=33(只)
這種情況共有公雞8隻,母雞11隻,小雞(48+33=)81(只)。
③分成12個大組,4個小組。
12個大組中公雞有:1×12=12(只)
12個大組中小雞有:6×12=72(只)
4個小組中母雞有:1×4=4(只)
4個小組中小雞有:3×4=12(只)
這種情況共有公雞12隻,母雞4隻,小雞(72+12=)84(只)。所以本題共有三種可能性:公雞買4隻,母雞買18隻,小雞買78隻;或公雞買8隻,母雞買11隻,小雞買81隻;或公雞買12隻,母雞買4隻,小雞買84隻。
絕對正確如果想要其他的方法解狂M
Ⅵ C語言(百錢買百雞的問題)
百錢百雞問題中國古代數學家張丘建在他的《算經》中提出了著名的「百錢買百雞問題」:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?
*題目分析與演算法設計設雞翁、雞母、雞雛的個數分別為cocks(x),hens(y),chicks(z),題意給定共100錢要買百雞,若全買公雞最多買20隻,顯然cocks的值在0~20之間;
同理,hens的取值范圍在0~33之間,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此問題可歸結為求這個不定方程的整數解。由程序設計實現不定方程的求解與手工計算不同。在分析確定方程中未知數變化范圍的前提下,可通過對未知數可變范圍的窮舉,驗證方程在什麼情況下成立,從而得到相應的解。
程序解釋
main()
{
int cocks=0,hens,chicks;
while (cocks<=19) //公雞只數小於19
{hens=0;
while(hens<=33) //母雞小於33隻
{chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*總是的進一步討論這類求解不定方程總理的實現,各層循環的控制變數直接與方程未知數有關,且採用對未知數的取值范上窮舉和組合的方法來復蓋可能得到的全部各組解。能否根據題意更合理的設置循環控制條件來減少這種窮舉和組合的次數,提高程序的執行效率,請讀者考慮
Ⅶ 如何用C++編寫百錢百雞問題
1、百錢買百雞問題——一百個銅錢買了一百隻雞,其中公雞一隻5錢、母雞一隻3錢,小雞一錢3隻,問一百隻雞中公雞、母雞、小雞各多少)。
這是一個古典數學問題,設一百隻雞中公雞、母雞、小雞分別為x,y,z,問題化為三元一次方程組:
這里x,y,z為正整數,且z是3的倍數;由於雞和錢的總數都是100,可以確定x,y,z的取值范圍:
1) x的取值范圍為1~20
2) y的取值范圍為1~33
3) z的取值范圍為3~99,步長為3
對於這個問題可以用窮舉的方法,遍歷x,y,z的所有可能組合,最後得到問題的解。
初始演算法
1.初始化為1;
2.計算x循環,找到公雞的只數;
3.計算y循環,找到母雞的只數;
4.計算z循環,找到小雞的只數;
5.結束,程序輸出結果後退出。
演算法細化
演算法的步驟1實際上是分散在程序之中的,由於用的是for循環,很方便的初始條件放到了表達式之中了。
步驟2和3是按照步長1去尋找公雞和母雞的個數。
步驟4的細化
4.1 z=1
4.2 是否滿足百錢,百雞
4.2.1 滿足,輸出最終百錢買到的百雞的結果
4.2.2 不滿足,不做處理
4.3 變數增加,這里注意步長為3
2、程序代碼如下
#include"stdio.h"
main()
{
intx,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=3;z<=99;z+=3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否滿足百錢和百雞的條件*/printf("cock=%d,hen=%d,chicken=%d ",x,y,z);
}
}
程序運行結果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
Ⅷ 用三元一次方程怎麼解百錢百雞這倒數學題
100元買100隻雞,所以平均每隻一元。這樣每1隻公雞和6隻小雞構成一種組合(甲組合),實現7隻雞7元;每1隻母雞和3隻小雞構成另一種組合(乙組合),實現4隻雞4元。然後用100除以7,當商分別為4、8和12時,對應的余數分別為72、44和16。這些余數都是4的18倍、11倍和4倍。所以4個甲組合和18個乙組合可以滿足題意,同理8個甲組合和11個乙組、12個甲組合和4個乙組合也滿足題意。這樣就可以分別得出4隻公雞、18隻母雞和78隻小雞是一種答案;8隻公雞、11隻母雞和81隻小雞是一種答案;12隻公雞、4隻母雞和84隻小雞是一種答案。又因為100可以被4整除。所以完全可以由乙組合單獨來滿足題意。既25個乙組合,也就是25隻母雞和75隻小雞也為一種答案(當要求必須買公雞時,該結果捨去)。
設公雞=x只 母雞=y 小雞=z
x+y+z=100
5x+3y+1/3z=100
可整理出6x+3y=z代入上式中
x=(100-4y)/7 且必有5x<100 3y<100 z<300
所以y>70
有上述條件,用試數法,推算出滿足x、y、z均為整數的數值即為答案了。
(1)公雞4隻,母雞18隻,小雞78隻;
(2)公雞8隻,母雞11隻,小雞81隻;
(3)公雞12隻,母雞4隻,小雞84隻;
(4)母雞25隻,小雞75隻(當要求必須買公雞時捨去)。
Ⅸ 數學的,百錢百雞問題
設公雞X只只 母雞y只 小雞z只
x+y+z=100 ( 一共100隻)
5x+3y+z=100 (公雞1隻值錢5,母雞1隻值錢3,小雞3隻值錢1 一共的錢)
然後解出來 就對了
Ⅹ C語言:百錢百雞問題
#include<stdio.h>
void main(){
int cockNum; //定義公雞的數量,也就是雞翁的數量
int henNum; //定義母雞的數量,也就是雞母的數量
int chickenNum; //定義小雞的數量,也就是雛雞的數量
int count = 0; //定義輸出結果的編號
//公雞100文錢能買100 / 5 = 20隻
for (cockNum = 0; cockNum <= 20; cockNum++) {
//母雞100文錢 能買100 / 3 = 33隻,還多1文
for (henNum = 0; henNum <= 33; henNum++) {
//三種雞的只數總和是100隻,故只要確定公雞和母雞的只數,就能確定小雞的只數
chickenNum = 100 - cockNum - henNum;
//三種雞的總價格是100文,故以此為條件分別輸出所有雞的只數
if (5 * cockNum + 3 * henNum + chickenNum / 3.0 == 100) {
count++; //輸出結果的編號自增
printf("%d.公雞的數量是:%d只,母雞的數量是:%d只,小雞的數量是:%d只。\n",count,cockNum,henNum,chickenNum);
}
}
}
}