数学建模社区-数学中国

标题: 百鸡问题 [打印本页]

作者: 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 Y1 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大于等于01 p9 ~7 L$ d. @* N
  所以4t大于等于0. L" K' b7 `+ C& G
  25-7t大于等于04 _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 dvoid 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' Lwhile(cocks<=20)
: g* s! i4 @  M2 u$ l* A/ r& Q{
! o/ N$ Y8 J" f6 dhens=0;$ l. W) e  H$ M! `1 W3 U
while(hens<=33): Q& W- V2 g2 W: H
{
! O) b) W) |6 Y! xchicks=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 dhens++;
* ?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 xjava语言解法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