题目描述
鸡和兔关在一个笼子里,鸡有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;
}