这个问题出自《张邱建算经》卷下。
百鸡问题通常用试探法来解决,另外的方法是用求不定方程整数解的方法来解决这个问题。
试探法程序中,各种参数用宏定义来给定比较合适。如果将本程序用于求解其他问题,只需要修改这些宏定义。有了这个程序,很容易将这些宏定义值改为程序输入。
程序中分别用i,j,k表示鸡翁、鸡母和鸡鶵所卖的钱数,从0到最大的可能进行试探。
程序如下:
/* 百鸡问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。 * 凡百钱买鸡百只,问鸡翁、母、鶵各几何? * 答曰:鸡翁四,值钱二十; 鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。 * 又答:鸡翁八,值钱四十;鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七。 * 又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十 四,值钱二十八。 */ #include <stdio.h> #define COIN 100 #define N 100 #define N1 5 #define N2 3 #define N3 3 int main(void) { int i, j, k; for(i=0; i<= COIN / N1; i++) for(j=0; j<= COIN / N2; j++) for(k=0; k<=N; k+=N3) if(i*N1 + j*N2 + k/N3 == COIN && i+j+k == N) printf("%d, %d, %d ", i, j, k); return 0; }程序运行结果如下:
0, 25, 75
4, 18, 78
8, 11, 81
12, 4, 84