(C语言)1007 鸡兔同笼

题目描述

鸡和兔关在一个笼子里,鸡有2只脚,兔有4只脚,没有例外。已知现在可以看到笼子里m个头和n只脚,求鸡和兔子各有多少只?

输入

输入两个整数heads和feet,分别代表笼子里头的个数和脚的个数。(假设heads和feet都在合法的数据范围内)

输出

依次输出鸡和兔的只数。(数字为0的也要输出)

样例输入 Copy

12 40

样例输出 Copy

4 8

 相关知识

1.解方程

假设有x只鸡,y只兔,共heads个头,feet只脚,则建立方程:

x+y=heads

2*x+4*y=feet

故而,x=heads-y,y=heads-x,分别带入方程2*x+4*y=feet,得以下方程:

x=(4*heads-feet)/2

y=(feet-4*heads)/2

带入heads值、feet值就能解出最终结果

2.用for循环

脑子里全是for()循环

(1)for()循环限制条件

for(int i=0;i<=heads;i++)
	{
		for(int j=0;j<=heads;j++)
		{
			if(i+j==heads&&2*i+4*j==feet)
			{
				x=i;
				y=j;
			}
		}
	}

这里需要是i<=heads,j<=heads或者 i<=feet/2,j<=feet/4

如果是i<heads,j<heads或者 i<feet/2,j<feet/4,则缺少一种可能性,即兔为0或鸡为0的情况


示例代码

 【思路一】完全行得通,运行通过

【思路一】
#include<stdio.h>
int main(){
	int x,y;	//设鸡有x只,兔有y只
	int heads,feet;	//共有heads个头,feet只脚
	scanf("%d %d",&heads,&feet);  //
	x=(4*heads-feet)/2;
	y=(feet-2*heads)/2;
	printf("%d %d",x,y);
	return 0;
}

【思路二】循环限定条件可以从heads限制,也可以从feet限制

【思路2】
#include<stdio.h>
int main(){
	int x,y;	//设鸡有x只,兔有y只
	int heads,feet;	//共有heads个头,feet只脚
	scanf("%d %d",&heads,&feet);  
	for(int i=0;i<=heads;i++)
	{
		for(int j=0;j<=heads;j++)
		{
			if(i+j==heads&&2*i+4*j==feet)
			{
				x=i;
				y=j;
			}
		}
	}
	printf("%d %d",x,y);
	return 0;
}
【思路2】
#include<stdio.h>
int main(){
	int x,y;	//设鸡有x只,兔有y只
	int heads,feet;	//共有heads个头,feet只脚
	scanf("%d %d",&heads,&feet);  
	for(int i=0;i<=heads;i++)
	{
		for(int j=0;j<=heads;j++)
		{
			if(i+j==heads&&2*i+4*j==feet)
			{
				x=i;
				y=j;
			}
		}
	}
	printf("%d %d",x,y);
	return 0;
}

运行结果

鸡兔同笼问题是经典的数学问题,用C语言解决这个问题通常会利用循环或者数组来模拟。基本思路是设置两个变量分别代表鸡和兔子的数量,然后用另一个变量来计算它们脚的总数。设鸡的数量为x,兔子的数量为y,鸡有2只脚,兔子有4只脚。 算法步骤如下: 1. 初始化鸡和兔子的脚数总和为0。 2. 循环遍历从1到x+y(鸡和兔子总数),每次假设当前数量是一个动物。 3. 如果这个数量对应的是鸡(即总数除以2余1),则增加2只脚;如果是兔子,则增加4只脚。 4. 在每一步后,更新总的脚数。 5. 当总的脚数等于实际脚数(2x+4y,因为鸡的脚是2倍兔子的)时,找到了正确的鸡和兔子组合。 下面是一个简单的C语言函数示例: ```c #include <stdio.h> int findChickenAndRabbits(int totalFeet, int chickenFeet) { for (int i = 0; i <= totalFeet / chickenFeet; i++) { int rabbits = i; int chickens = totalFeet / chickenFeet - rabbits; if (chickens * 2 + rabbits * 4 == totalFeet) { return chickens, rabbits; // 返回鸡和兔子的数量 } } return -1; // 没有解的情况 } int main() { int totalFeet = 60; // 总脚数 int chickenFeet = 2; // 鸡脚数 int chickens, rabbits; chickens = rabbits = findChickenAndRabbits(totalFeet, chickenFeet); if (chickens != -1) { printf("鸡有:%d 只,兔子有:%d 只\n", chickens, rabbits); } else { printf("无解或无法确定具体数量\n"); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值