-
百雞問題
鎖定
- 中文名
- 百雞問題
- 出 處
- 《張丘建算經》
- 性 質
- 數學問題
- 提出時間
- 5~6世紀
百雞問題問題
今有雞翁一,值錢伍;雞母一,值錢三;雞鶵三,值錢一。凡百錢買雞百隻,問雞翁、母、鶵各幾何?答曰:雞翁四,值錢二十;雞母十八,值錢五十四;雞鶵七十八,值錢二十六。又答:雞翁八,值錢四十;雞 母十一,值錢三十三,雞鶵八十一,值錢二十七。又答:雞翁十二,值錢六十;雞母四、值錢十二;雞鶵八十 四,值錢二十八。”
百雞問題歷史淵源
原書沒有給出解法,只説如果少買7只母雞,就可多買4只公雞和3只小雞。所以只要得出一組答案,就可以推出其餘兩組答案。中國古算書的著名校勘者甄鸞和李淳風註釋該書時都沒給出解法,只有約6世紀的算學家謝察微記述過一種不甚正確的解法。到了清代,研究百雞術的人漸多,1815年駱騰風使用大衍求一術解決了百雞問題。1874年丁取忠創用一個簡易的算術解法。在此前後時曰醇(約1870)推廣了百雞問作《百雞術衍》,從此百雞問題和百雞術才廣為人知。百雞問題還有多種表達形式,如百僧吃百饅,百錢買百禽等。宋代楊輝算書內有類似問題,中古時近東各國也有相仿問題流傳。例如印度算書和阿拉伯學者艾布·卡米勒的著作內都有百錢買百禽的問題,且與《張邱建算經》的題目幾乎全同。
解法
數學解法
設公雞、母雞、小雞分別為x、y、z 只,由題意得:
①……x+y+z =100
②……5x+3y+(1/3)z =100
有兩個方程,三個未知量,稱為不定方程組,有多種解。
令②×3-①得:7x+4y=100;
所以y=(100-7x)/4=25-2x+x/4
令x/4=t, (t為整數)所以x=4t
把x=4t代入7x+4y=100得到:y=25-7t
易得z=75+3t
所以:x=4t
y=25-7t
z=75+3t
因為x,y,z為正整數
所以4t大於0
25-7t大於0
75+3t大於0
解得t大於0小於等於25/7 又因為t為整數
所以t=1時
x =4;y =18;z =78
當t=2時
x =8;y =11;z =81
當t=3時
x =12;y =4;z =84
C語言解法
#include <stdio.h> void main()(c++用 int main) { int cocks=0,hens,chicks; while(cocks<=20) { hens=0; while(hens<=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++; } }
輸出結果為:
公雞0只,母雞25只,小雞75只
公雞4只,母雞18只,小雞78只
公雞8只,母雞11只,小雞81只
公雞12只,母雞4只,小雞84只
java語言解法
public class BaiJiwenti { public static void main (String [] args) { for (int x = 0; x <= 19; x++) { for (int y = 0; y <= 33; y++) { int z = 100 - x - y; if((x * 5 + y * 3 + z / 3 == 100 ) && z % 3 == 0) { System.out.println("可買雞翁只數:" + x); System.out.println("可買雞母只數:" + y); System.out.println("可買雞雛只數:" + z); } } } } }
C#語言解法
程序如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 例4_17_13計科_0103_百錢買百雞 { class Program { static void Main(string[] args) { double x, y, z; Console.WriteLine("公雞\t母雞\t小雞\t"); for (x = 0; x <= 1000; x++) { for (y = 0; y <= 1000; y++) { z = 1000 - x - y; if (5 * x + 3 * y + z / 3 == 1000) Console.WriteLine("{0}\t{1}\t{2}\t", x, y, z); } Console.ReadKey(); } } }
PHP語言解法
//$a為公雞,$b為母雞,$c為小雞(每類雞,至少得有1只) for($a=1;$a<20;$a++){ for($b=1;$b<34;$b++){ $c=100-$a-$b; if($a*5+$b*3+$c/3 ==100){ echo "公雞",$a,"只,母雞",$b,"只,小雞",$c,"只<br/>"; } } } 最終結果 公雞4只,母雞18只,小雞78只 公雞8只,母雞11只,小雞81只 公雞12只,母雞4只,小雞84只
Java語言解法以及結果
易語言解法以及結果 .程序集 窗口程序集_啓動窗口 .子程序 _按鈕1_被單擊 .局部變量 x, 整數型, , , 公雞數 .局部變量 y, 整數型, , , 母雞數 編輯框2.加入文本 (“公雞” + “ ” + “母雞” + “ ” + “雛雞” + #換行符) .計次循環首 (20, x) .計次循環首 (33, y) .如果真 (x × 5 + y × 3 + (100 - x - y) ÷ 3 = 100) 編輯框2.加入文本 (#換行符 + 到文本 (x) + “ ” + “ ” + 到文本 (y) + “ ” + “ ” + 到文本 (100 - x - y) + #換行符 + #換行符) .如果真結束 .計次循環尾 () .計次循環尾 () 最終結果: 公雞 母雞 雛雞 4 18 78 8 11 81 12 4 84
public static void main(String[] args) { int k=0; for(int i=0;i<100;i++){ for(int j=0;j<100;j++){ k=100-i-j; if(i+j+k==100&&3*i+2*j+k/3==100){ if(k%3==0){ System.out.print("公雞:"+i); System.out.print("母雞:"+j); System.out.print("小雞:"+k); System.out.println(); } } } } } 最終結果: 公雞0只,母雞25只,小雞75只 公雞4只,母雞18只,小雞78只 公雞8只,母雞11只,小雞81只 公雞12只,母雞4只,小雞84只