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;
}
交上去超时~~ 求优化 展开
童心未泯的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;
}
交上去超时~~ 求优化 展开
3个回答
展开全部
假设鸽子数量为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必须为偶数.
那么:
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;
}
}
展开全部
你的程序是不是有个小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;
}
}
#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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先说下,你的程序可以运行,不会超时,很快就出来了,然后呢,你的程序我稍微做了下改动。
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询