相信你是最棒哒!!!
文章目录
题目描述
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
无输入
输出描述
给出所有的解,每组解占一行
解的顺序:按“字典序”排列,即公鸡数少的在前;公鸡数相同,母鸡数少的在前
格式:
cock=%d,hen=%d,chicken=%d\n
样例输出
cock=0,hen=25,chicken=75 cock=4,hen=18,chicken=78 cock=8,hen=11,chicken=81 cock=12,hen=4,chicken=84
提示
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
注意:浮点数的比较不准确
正确代码
注释版
#include <stdio.h>
int main()
{
double x, y, z; // 定义三个变量,分别代表公鸡、母鸡和小鸡的数量
for(x=0; x<=20; x++) // 外层循环,遍历公鸡的可能数量(0到20只)
for (y = 33; y >= 0; y--) // 内层循环,遍历母鸡的可能数量(33到0只,注意是递减的)
{
z = 100 - x - y; // 计算小鸡的数量,因为总共要买100只鸡
// 检查当前的公鸡、母鸡和小鸡数量是否满足条件
// 条件1:5倍的公鸡数量加上3倍的母鸡数量再加上小鸡数量除以3等于100钱
// 条件2:公鸡、母鸡和小鸡的总数量等于100只
if (5 * x + 3 * y + z / 3 == 100 && x + y + z == 100)
printf("cock=%.0f,hen=%.0f,chicken=%.0f\n", x, y, z); // 打印结果
}
return 0;
}
简洁版
#include <stdio.h>
int main()
{
double x, y, z;
for(x=0;x<=20;x++)
for (y = 33; y >= 0; y--)
{
z = 100-x-y;
if (5 * x + 3 * y + z / 3 == 100 && x + y + z == 100)
printf("cock=%.0f,hen=%.0f,chicken=%.0f\n", x, y, z);
}
return 0;
}
总结
通过两层循环遍历所有可能的公鸡和母鸡的数量组合,然后计算出对应的小鸡数量。如果这个组合满足题目中的两个条件(总价100钱和总数量100只),就打印出这个组合。printf
函数中的%.0f
表示打印浮点数时不显示小数部分,因为鸡的数量必须是整数。