数学建模社区-数学中国
标题:
百鸡问题
[打印本页]
作者:
marchboy
时间:
2012-6-9 00:10
标题:
百鸡问题
百鸡问题
; I7 [7 m; C, b% B8 f9 K
( W9 [7 [( c$ C1 p
今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。又答:鸡翁八,值钱四十;鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七。又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十 四,值钱二十八。”
( x' K) j. d! ~3 S1 ^( b
编辑本段
! S4 t' g' v' n* R* S$ k
原书说明
) Z/ F( a r5 z( X$ k& `5 Q
$ c+ `6 s& q6 b' p& _
原书没有给出解法,只说如果少买7只母鸡,就可多买4只公鸡和3只小鸡。所以只要得出一组答案,就可以推出其余两组答案。中国古算书的著名校勘者甄鸾和李淳风注释该书时都没给出解法,只有约6世纪的算学家谢察微记述过一种不甚正确的解法。到了清代,研究百鸡术的人渐多,1815年骆腾风使用大衍求一术解决了百鸡问题。1874年丁取忠创用一个简易的算术解法。在此前后时曰醇(约1870)推广了百鸡问作《百鸡术衍》,从此百鸡问题和百鸡术才广为人知。百鸡问题还有多种表达形式,如百僧吃百馒,百钱买百禽等。宋代杨辉算书内有类似问题,中古时近东各国也有相仿问题流传。例如印度算书和阿拉伯学者艾布·卡米勒的著作内都有百钱买百禽的问题,且与《张邱建算经》的题目几乎全同。
$ d! {& O8 j% L; O6 ]! A
编辑本段
, S6 ?- a5 [( n5 `
解法
. E" v% _5 ^5 M1 }9 \6 Y
1 L# K/ A% z6 d1 P
中国古代算书《张丘建算经》中有一道著名的百鸡问题:公鸡每只值5 文钱,母鸡每只值3 文钱,而3 只小鸡值1 文钱。现在用100 文钱买100 只鸡,问:这100 只鸡中,公鸡、母鸡和小鸡各有多少只?
~% N6 ^ g2 c' m3 t0 g; E
这个问题流传很广,解法很多,但从现代数学观点来看,实际上是一个求不定方程整数解的问题。解法如下:
- _# K0 G! w* R: y* \6 a/ V* _
设公鸡、母鸡、小鸡分别为x、y、z 只,由题意得:
" Z: ]0 q1 o, r; d7 g; {$ Q
①……x+y+z =100
% t* r7 d% n2 `' \ j8 ?- S$ c6 f
②……5x+3y+(1/3)z =100
. l* Z; b1 J( O# D$ V/ O9 x1 a
有两个方程,三个未知量,称为不定方程组,有多种解。
( b' _9 o$ l- I/ [
令②×3-①得:7x+4y=100;
" |5 D) ^+ i M3 e
所以y=(100-7x)/4=25-2x+x/4
- H& U+ i- m4 @( _+ r- E5 ]
令x/4=t, (t为整数)所以x=4t
[- O. X- W/ j, f& r# i+ a
把x=4t代入7x+4y=100得到:y=25-7t
0 D F/ Y& @* M$ G
易得z=75+3t
6 O) U/ U9 D3 V% j9 U
所以:x=4t
3 a% j" I6 h. ?. r" ?3 |( t4 O* Z
y=25-7t
# k) u- f& X6 L" R
z=75+3t
4 r! c6 n* U& f% D- U
因为x,y,z大于等于0
1 p9 ~7 L$ d. @* N
所以4t大于等于0
. L" K' b7 `+ C& G
25-7t大于等于0
4 _8 @) t! c& B0 H: P
75+3t大于等于0
: Z) b9 t+ M. n9 M9 L8 F+ t' N
解得t大于等于0小于等于25/7 又因为t为整数
* y' }6 A1 U4 U1 t
所以t=0,1,2,3(这里不要忘记t有等于0得可能)
5 {" y' W6 j2 B* C
当t=0时
, m6 Q* X0 n+ Q6 ]9 n0 @, l
x=0,y=25,z=75
s" P9 C4 I4 E, V# q" |
当t=1时
8 X* [1 m c0 z* F. L0 y E
x =4;y =18;z =78
% C% ?4 \) |1 A) P# p
当t=2时
/ {; w; a) h9 l- a0 ^) ?3 E
x =8;y =11;z =81
8 y) @: Y- {! t4 M1 v' ~/ a( n7 g! i
当t=3时
' y6 ?& P! x9 m9 r3 A
x =12;y =4;z =84
% f% R& ?1 A4 H8 O# i1 p4 q
编辑本段
, S) x1 \4 J& N% M* b f
C语言解法
# v9 H) l! x% L
, ?' m2 _4 g: Y* J4 E4 J8 C: S
Y9 [0 P$ I* h/ J6 F
#include <stdio.h>
: ]* b3 _; }% u9 d
void main()
! ~6 V0 S7 F1 G/ G6 f1 n
{
; s" k( Z1 t7 F
int cocks=0,hens,chicks;
3 s& l/ s" V; v' L
while(cocks<=20)
: g* s! i4 @ M2 u$ l* A/ r& Q
{
! o/ N$ Y8 J" f6 d
hens=0;
$ l. W) e H$ M! `1 W3 U
while(hens<=33)
: Q& W- V2 g2 W: H
{
! O) b) W) |6 Y! x
chicks=100-cocks-hens;
* o- _ c+ D& ]( P! _7 | r
if(5.0*cocks+3.0*hens+chicks/3.0==100.0)
9 U. x8 U9 ^2 g
printf("公鸡%d只,母鸡%d只,小鸡%d只\n\n",cocks,hens,chicks);
* R' }/ @2 w- l$ G# N9 d
hens++;
* ?8 ?7 ^3 O |0 f
}
4 {2 F" E+ S+ G; H5 T* e |
cocks++;
* v4 u! F8 `$ ]" ?3 S% ~* k
}
" K: @9 ~3 P0 v+ y, Q, f
}
* A8 D; Q" B5 r" Z- r5 S; o
输出结果为:
7 c9 ~; H; `/ `) _, t# ~0 V
公鸡0只,母鸡25只,小鸡75只
l( g0 e- c1 e# @$ q7 d6 D. I: A
公鸡4只,母鸡18只,小鸡78只
* |, E. e2 d4 u6 h* ]% S
公鸡8只,母鸡11只,小鸡81只
! H4 K0 @3 `% `
公鸡12只,母鸡4只,小鸡84只
: ]1 r3 c: U/ g. Y6 f
编辑本段
& D) ?) ^! M9 v: ]; V+ G# d9 x
java语言解法
4 m) L" V" R5 d \7 b" P
j7 L2 |5 t ]1 T0 x
public class BaiJiwenti
; K# ]1 Y; R2 Y5 |0 `3 v5 b
{
4 [8 | q* a4 E7 \6 m h
public static void main (String [] args)
2 X# L1 U& G- ^) p, m m* P
{
, z5 n3 R. W! v8 _) o: m) J( Z" Q% c
for (int x = 0; x <= 19; x++)
$ `/ v- b$ w+ k' P$ Z2 \
{
) h7 |: o- F( ]
for (int y = 0; y <= 33; y++)
3 f1 o; H/ U5 t3 Q0 K* d9 g: i( k
{
; x" o _ _# e; s6 d& T
int z = 100 - x - y;
) R: d) L2 d/ N; ~' d: t- E
if((x * 5 + y * 3 + z / 3 == 100 ) && z % 3 == 0)
' h( {& w3 p* @7 T+ t" V
{
- ]) F* p* u U6 F7 v8 W
System.out.println("可买鸡翁只数:" + x);
* w9 s f, |7 x2 i R
System.out.println("可买鸡母只数:" + y);
. N. [8 Q7 t4 s2 f& R. }
System.out.println("可买鸡雏只数:" + z);
( \! z3 V" M7 N w {% i0 Y
}
! f7 O! ^1 {+ B' `2 L6 l# p
}
b( g- P1 v5 @7 \- \2 s. Z: k
}
1 e$ r% z/ m# s# P6 t
}
3 R+ A6 {6 E: b: o: f! e3 F
}
5 K1 v! _9 T; _1 Q9 u* Z+ _/ Q
作者:
wssl103050
时间:
2012-6-9 06:46
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5