题目描述
有三种动物分别被关在笼子里,它们分别是鸡,兔子和三脚猫。
每只鸡有一个头,两只脚;每只三脚猫有一个头,三只脚;每只兔子有一个头,四只脚。现在这道笼子里一共有X个头,Y只脚,但这个消息不足以推导出鸡,兔和三脚猫的准确数量。这时候就需要编程来帮忙了——请你求出笼子里分别至少,至多有多少只兔子。
输入
你需要在一个测试数据中处理多个鸡兔同笼问题。输入第一行T表示问题的数量。
接下来T行,每行两个用空格分隔的正整数X,Y表示头和脚的数量。
输出
对于每个问题,输出一行两个空格分隔的整数,表示笼子里至少和至多有几只兔子。输入数据保证每个问题至少有一种鸡,三脚猫和兔子的合法组合。
数据范围
对于50%的数据,1<=x<=10^6。
对于100%的数据,1<=X,Y<=10^9,1<=T<=20。
题目思路
和鸡羊同栏(链接在评论区)一样,这道题目也是一道鸡兔同笼类型的题目。但是,这里多了一个三脚猫。那该怎么办呢?
我们可以分最多和最少两种情况来写。既然要兔子最少,那么三脚猫就要最多。那么如果三脚猫脚的总只数大于等于头的三倍,那么就可以直接输零。否则输出总脚数减去头数的三倍。
如果要兔子最多的话,如果我们可以先设每个都是鸡,然后脚数比头的两倍大的数量除二就是最多的数量(如果脚数比头的两倍大的数量不能被而整除,那么就增加一只三脚猫。
最后前面在输入T,再套个循环就可以了。
题目主程序如下:
void cx(int t)
{
int x,y;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
if(y<=x*3) cout<<0<<' ';
else cout<<y-x*3<<' ';
if(y<=x*2) cout<<0<<endl;
else cout<<(y-x*2)/2<<endl;
}
}
题目标程
题目标程如下:
#include<bits/stdc++.h>
using namespace std;
int t,x,y;
int main()
{
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>x>>y;
if(y<=x*3) cout<<0<<' ';
else cout<<y-x*3<<' ';
if(y<=x*2) cout<<0<<endl;
else cout<<(y-x*2)/2<<endl;
}
return 0;
}
这道题目就这么多。