引入

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡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;
} 

运行测试

在这里插入图片描述


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐