解题思路:
审清题干,养成习惯。
百鸡百钱是一个很经典的循环题目了。公鸡(cock)一只5钱,母鸡(hen)一只3钱,小鸡(chicken)三只1钱,目的是求出用一百钱买一百只鸡的所有搭配方法。注意,这里是刚好用完一百钱,刚好买了一百只鸡。
很明显,这道题用循环就可以很简单的求解出来。
我们来分析一下,公鸡一只5钱,那么最多可以买20只公鸡,也就是说公鸡的数量不可能超过20只(当然,不可能达到这么多),这里第一个循环结束的条件就出现了。同样的,母鸡一只3钱,那么母鸡的数量不可能超过33只,第二个循环结束的条件也出现了。当我们用循环得到了公鸡和母鸡的数量时,小鸡的数量也就随之确定了,求小鸡的数量有两种思路。
第一种,控制百鸡验证百钱。求小鸡的数量:chicken=100-cock-hen。验证是否满足条件时需要验证两点,一是小鸡的数量是否是3的倍数(小鸡三只1钱),二是总钱数为一百。即:
chicken%3==0 && cock*5+hen*3+chicken/3==100
第二种,控制百钱验证百鸡。求小鸡的数量:chicken=(100-cock*5-hen*3)*3。验证是否满足条件时也需要验证两点,一是公鸡和母鸡所需的钱数是否超过一百,而是鸡的总数为一百。即:
cock*5+hen*3<=100 && cock+hen+chicken==100
当条件符合时,我们就可以进行输出操作。注意输出格式的要求即可。
注意事项:
(1)理清思路,不要把自己绕晕了;
(2)注意两个循环的结束条件;
(3)注意输出格式的要求。
参考代码:
控制百鸡验证百钱:
# include<stdio.h> int main() { int cock,hen,chicken; for(cock=0;cock<=20;cock++) for(hen=0;hen<=33;hen++) { chicken=100-cock-hen; if(chicken%3==0 && chicken/3+cock*5+hen*3==100) printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken); } return 0; }
控制百钱验证百鸡:
# include<stdio.h> int main() { int cock,hen,chicken; for(cock=0;cock<=20;cock++) for(hen=0;hen<=33;hen++) { chicken=(100-cock*5-hen*3)*3; if(cock*5+hen*3<=100 && chicken+cock+hen==100) printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken); } return 0; }
如有裨益,吾之幸也。祝大家编程进步。
0.0分
30 人评分
想问一下各位大佬,这个代码哪里有问题,为啥我没有输出呢(泪奔) #include<stdio.h> #include <string.h> #include <math.h> int main() { int cock,hen,chicken; int m=5*cock+hen*3+(chicken/3); for(int cock=0;cock<100;cock++){ for(int hen=0;hen<100;hen++){ for(int chicken=0;chicken<100;chicken++){ if(m==100&&((cock+hen+chicken)==100)){ printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken); } } } } return 0; }
#include<stdio.h> int main() { for(int i=0;i<=100/5;i++) { for(int j=0;j<100/3;j++) { for(int k=0;k<100*3;k+=3) { if(5*i+3*j+(k*1)/3==100&&i+j+k==100) printf("cock=%d,hen=%d,chicken=%d\n",i,j,k); } } } return 0; }
#include <stdio.h> #include <string.h> #include <math.h> int main() { int i,j,k,a,b,c; for(a=0,i=0;i<25;a+=5,i++) { for(b=0,j=0;j<33;b+=3,j++) { for(c=0,k=0;k<300;c++,k+=3) { if(a+b+c==100&&i+j+k==100) { printf("cock=%d,hen=%d,chicken=%d\n",i,j,k); } } } } }
#include<stdio.h> #include<math.h> #define money 100 #define num 100 int main(void){ int cock,hen; float chicken; for(cock=0;cock<=20;cock++){ for(hen=0;hen<=((100-cock*5)/3);hen++){ chicken=num-cock-hen; if(cock*5+hen*3+chicken/3==money) printf("cock=%d,hen=%d,chicken=%.f\n",cock,hen,chicken); } } return 0; }
为什么不可以用三重循环然后判断相乘后相加等于100
简单的a+b (C语言代码)浏览:764 |
C语言训练-求素数问题 (C语言代码)浏览:1509 |
A+B for Input-Output Practice (V) (C语言代码)浏览:640 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:565 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:964 |
【明明的随机数】 (C语言代码)浏览:845 |
母牛的故事 (C语言代码)浏览:1451 |
幸运数 (C++代码)浏览:1309 |
模拟计算器 (C++代码)浏览:885 |
C二级辅导-统计字符 (C语言代码)浏览:695 |
王文萱 2023-04-08 19:08:54 |
或许你for再加个大括号试试
王文萱 2023-04-08 19:09:38 |
看错了哈哈
王文萱 2023-04-08 19:56:15 |
你把m==100,这里出了问题,换成m 的表达式就行,另外小鸡除以3的余数须得是0才行
大凯子必上岸 2023-04-13 08:07:57 |
@dotcpp0633175 好的,谢谢大佬,我试着运行一下