c++问题、、、、、、、、、

浙江工商大学校园里绿树成荫,环境非常舒适,因此也引来一批动物朋友来此居住。童心未泯的redraiment就经常带些碎面包什么的去广场喂鸽子和兔子,并和它们玩耍。一点也不像... 浙江工商大学校园里绿树成荫,环境非常舒适,因此也引来一批动物朋友来此居住。

童心未泯的redraiment就经常带些碎面包什么的去广场喂鸽子和兔子,并和它们玩耍。一点也不像大学生,还是一副老不正经的样子,呵呵。

随着鸽子和兔子数目的增多,redraiment带的那点食物已经不够它们瓜分了。为了能让自己的好朋友吃的饱饱的,redraiment决定统计一下有多少只鸽子和有多少只兔子,以便带来足够的食物。一、二、三、四、五...他开始数了。

现在,他已经知道有这些鸽子和兔子一共有n个头和m只脚。请你帮他写个程序计算一下一共有多少只鸽子和兔子。

输入

输入包括多组数据。
每行包括2个数据:n、m(代表上面题目中提到的意思1≤n, m≤230)。
n、m都是整数。
输入以0 0作为结束。

输出

每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。
如果输入的测试数据不能求得结果,那肯定是redraiment这个马大哈数错了,就输出"Error"提示他。

样例输入

35 94
1 3
0 0

样例输出

23 12
Error
#include <iostream>
using namespace std;
int main()
{
int a,b,m,n;
bool flag;
while(cin>>n>>m,n!=0||m!=0)
{
flag=false;
if(m%2!=0) flag=false;
else
{
for(a=1;a<=n;a++)
{
for(b=1;b<=n;b++)
{
if(a+b==n&&2*a+4*b==m)
{
cout<<a<<" "<<b<<endl;
flag=true;
break;
}
}
}
}
if(flag==false) cout<<"Error"<<endl;
}
return 0;
}
交上去超时~~ 求优化
展开
 我来答
gis19831203
2011-04-03 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:832万
展开全部
假设鸽子数量为x,兔子数量为y;
那么:
x + y = n;
2*x + 4*y = m;
求得 y = m/2-n; x = 2n - m/2;
这样程序就很好写了,判断错误需要这样判断.
1.m必须为偶数
2.m/2 >= n;
3.2n >= m/2;
以上三条必须同时满足,否则就提示Error.
或者可以这样判断:
if(x + y) != n || (x * 2 + y * 4) != m)
ERROR;
代码和楼上基本相同,楼上的只是没有判断m必须为偶数.
追问
判断偶数只是能减少循环的次数而已  楼上的我提交了还是交不上去
追答
这样做:
#include
using namespace std;
void main(void)
{
int x, y, n, m;
cin>>n>>m;

x = 2 * n - m / 2;
y = m / 2 - n;
if((x + y) != n || (x * 2 + y * 4) != m)
{
cout<<"ERROR"<<endl;
}
else
{
cout<<"鸽子数量:"<<x<<endl;
cout<<"兔子数量:"<<y<<endl;
}
}
百度网友743d7eaad
2011-04-01 · TA获得超过361个赞
知道小有建树答主
回答量:323
采纳率:0%
帮助的人:337万
展开全部
你的程序是不是有个小bug,for(a=1........(是不是从0开始,下面的b的循环相同),不知道我编的行不行,比较仓促,估计有些问题没考虑,如下:
#include <iostream>
using namespace std;
int main()
{
float a,b,m,n,t;
while(cin>>n>>m,n!=0||m!=0)
{
t=m/2;
a=t-n;
b=2*n-t;
if( int(t)==t && a>=0 && b>=0 ) cout<<a<<" "<<b<<endl;
else cout<<"error"<<endl;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liaohanjie1314
2011-04-01 · TA获得超过451个赞
知道答主
回答量:181
采纳率:0%
帮助的人:78.2万
展开全部
首先说下,你的程序可以运行,不会超时,很快就出来了,然后呢,你的程序我稍微做了下改动。
#include <iostream>
using namespace std;
int main()
{
int a,b,m,n;
bool flag=false;
while(cin>>n>>m,n>0||m>0)
{
for(a=1;a<n;a++)
{
b=n-a;
if(2*a+4*b==m)
{
cout<<a<<" "<<b<<endl;
flag=true;
break;
}

}
if(flag==false) cout<<"Error"<<endl;
}
if(flag==false) cout<<"Error"<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式