引入
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
都是一个题
分析
每种鸡至少一个,钱加一起等于100,鸡子数量加起来等于100
我们都知道,我们一般用穷值法,在for循环求多个符合条件的解,通常我考虑一些条件来减少循环的次数。
比如说每种鸡至少一个,那么我们自变量的初始值就是1
公鸡最多: 100/5=20只
母鸡最多: 100/3=33只
小鸡最多 100-公鸡-母鸡
这个最多是总价不超过100来算的,同时我们还可以考虑一方面每种鸡至少一个,加入可以变成
公鸡最多: (100-3-1/3)/5=19只
母鸡最多: (100-5-1/3)/3=31只
小鸡最多: 100-公鸡-母鸡
循环的次数是不是又变少了
代码
#include <stdio.h>
int main(void) {
//定义公鸡、母鸡、小鸡的数量变量
int x,y,z;
//定义数量变量和价格变量
int sump,sumc;
int i,j,k;
//公鸡最少1只,最多100/5=20只
for(i = 1; i <= 19; i++){
//母鸡最少1只,最多100/3=33只
for(j = 1; j <= 31; j++){
//小鸡最少1只,最多100-公鸡-母鸡
for(k = 1; k <= 100-i-j; k++){
sump = k/3+j*3+5*i;
sumc = i+j+k;
if(sump == 100 && sumc == 100){
printf("公鸡、母鸡、小鸡有:%d %d %d\n",i,j,k);
}
}
}
}
return 0;
}