Author:MTingle
人工智能专业
荃者所以在鱼,得鱼而忘荃;蹄者所以在兔,得兔而忘蹄;言者所以在意,得意而忘言。吾安得夫忘言之人而与之言哉!

【C语言】百鸡问题

问题描述:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?(我国古代算术一-张丘建《算经》)含义:
1只公鸡5元钱,1只母鸡3元钱,3只小鸡1元钱,现100元钱买100只鸡,则公鸡、母鸡、小鸡应各买多少只?


完整代码如下:

#includeint main(){int cock = 0, hen = 0, chick = 0;for (cock = 0; cock <= 100; cock++){for (hen = 0; hen <= 100; hen++){for (chick = 0; chick <= 100; chick++){if ((cock + hen + chick == 100) && (5 * cock + 3 * hen + chick / 3 == 100)&&(chick%3==0)){printf("cock:%d hen:%d chick:%d\n",cock,hen,chick);}}}}}

题解:

提示:数学中的方程思想

我们可以利用高中数学中的函数思想,设置变量cock(公鸡),hen(母鸡),chick(小鸡)用于表示它们各自的数量,将他们的数量初始化为0,紧接着我们开始列方程,因为要用100块钱买100只鸡,所以:

cock+hen+chick==100(所有鸡的数量相加为100)

5*cock+3*hen+chick*(1/3)==100(要注意三只小鸡一块钱,所以一直小鸡1/3块,仔细!!!)

并且,我们要注意,小鸡是一块钱三只,所以,小鸡只能3只3只买,不能出现什么1.3只之类的,所以一定要保证chick%3==0,保证chick的数量是一个整数!

以上三个条件均要同时满足,所以要用&&(且)运算符

if ((cock + hen + chick == 100) && (5 * cock + 3 * hen + chick / 3 == 100)&&(chick%3==0))

那么,根据我们学过方程的思想,两个方程,三个未知数,这大概率是个多解问题,所以我们可以想到当cock,hen,chick的值不同时,得到的答案自然是不同的,所以我们可以知道我们需要设置循环,不断改变cock,hen,chick的值,三个变量的范围都是从0到100(百鸡问题),那么我们可以自然的想到设置三个循环

for (cock = 0; cock <= 100; cock++){for (hen = 0; hen <= 100; hen++){for (chick = 0; chick <= 100; chick++)}

那么如果满足上面的所有条件,我们就将它打印出来

for (cock = 0; cock <= 100; cock++){for (hen = 0; hen <= 100; hen++){for (chick = 0; chick <= 100; chick++){if ((cock + hen + chick == 100) && (5 * cock + 3 * hen + chick / 3 == 100)&&(chick%3==0)){printf("cock:%d hen:%d chick:%d\n",cock,hen,chick);}}}}


总结

相信在做这个问题的大家肯定是刚刚步入大一的新生,你们或许正在被C语言困扰,希望这些博客可以帮助到你们,作为一个曾经也被C困扰的过来人,上课听不懂是常态,希望大家不要焦虑不要迷茫,不会写不知道怎么下手是一件再正常不过的事情,当你看的越来越多,做的越来越多,你的代码能力一定会有很大的提升的!!!

博主将持续更新有关C语言的基础题目,java的基础练习,以及数据结构的内容,有需要的可以关注一下