烟火尘霄


私信TA

用户名:tzu190341102

访问量:63222

签 名:

等  级
排  名 95
经  验 8670
参赛次数 1
文章发表 6
年  龄 0
在职情况 学生
学  校 泰州学院
专  业

  自我简介:

TA的其他文章

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

百鸡百钱是一个很经典的循环题目了。公鸡(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;
}
2023-04-07 09:06:31
#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;
}
2022-11-28 20:48:52
#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);
			   }
		   }
	   }
   }
}
2021-08-21 19:10:30
#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;
}
2021-07-28 16:19:44
为什么不可以用三重循环然后判断相乘后相加等于100
2021-03-28 21:59:20
很棒!
2021-02-02 13:06:43
  • «
  • 1
  • »