解题思路:
审清题干,养成习惯。

百鸡百钱是一个很经典的循环题目了。公鸡(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.0分

19 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 12 条评论

大凯子必上岸 1年前 回复TA
@大凯子必上岸 @dotcpp0633175 好的,谢谢大佬,我试着运行一下
王文萱 1年前 回复TA
@大凯子必上岸 你把m==100,这里出了问题,换成m 的表达式就行,另外小鸡除以3的余数须得是0才行
王文萱 1年前 回复TA
@大凯子必上岸 看错了哈哈
王文萱 1年前 回复TA
@大凯子必上岸 或许你for再加个大括号试试
大凯子必上岸 1年前 回复TA
想问一下各位大佬,这个代码哪里有问题,为啥我没有输出呢(泪奔)

#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;
}
江雪沉月 2年前 回复TA
#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;
}
浅梦 3年前 回复TA
#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);
			   }
		   }
	   }
   }
}
蠢狗君 3年前 回复TA
#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;
}
软件二班谭豪 3年前 回复TA
@软件二班谭豪 好的!谢谢大神!
烟火尘霄 3年前 回复TA
@软件二班谭豪 那样时间复杂度太高了