#include<stdio.h>
int abs(int m);
int main()
{
int n,m,i,k;
while(scanf("%d%d",&n,&m),m+n)
{
k=0;
for(i=0;i<=abs(m);i++)
{
if((n-i)*i==m)
{
k++;
break;
}
}
if(k>0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
int abs(int m)
{
if(m<0)
m=-m;
return(m);
}
杭电2092题,迷惑,到底错在哪里??
答案:3 悬赏:0 手机版
解决时间 2021-03-02 03:32
- 提问者网友:最爱你的唇
- 2021-03-01 15:32
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-03-01 16:44
怎么连分都不给一点啊。算了帮你看下好了。
算法错误,你搜索这两个整数怎么有一个数就向正方向搜索呢,那个for语句里的i。就正方向搜索的话-6,9这个sample就错了,有解得:-3+(-3) = -6;(-3)*(-3)= 9;你代码运行出来是“no”的。
解决办法:两个。第一个:这个就是求x + y = n 和 x * y = m的方程组啊,套一下用解方程组的公式法算下就ok了。
第二个:暴力,就在你自己这个基础上改好了,你应该比较乐意。我之前说了for里面就是向正方向搜索的,那你把范围扩大就好了呗,从 -abs(m)开始就可以了呀:for(i=-abs(m);i<=abs(m);i++)
其他不用改了,刚才提交了下AC了。
算法错误,你搜索这两个整数怎么有一个数就向正方向搜索呢,那个for语句里的i。就正方向搜索的话-6,9这个sample就错了,有解得:-3+(-3) = -6;(-3)*(-3)= 9;你代码运行出来是“no”的。
解决办法:两个。第一个:这个就是求x + y = n 和 x * y = m的方程组啊,套一下用解方程组的公式法算下就ok了。
第二个:暴力,就在你自己这个基础上改好了,你应该比较乐意。我之前说了for里面就是向正方向搜索的,那你把范围扩大就好了呗,从 -abs(m)开始就可以了呀:for(i=-abs(m);i<=abs(m);i++)
其他不用改了,刚才提交了下AC了。
全部回答
- 1楼网友:等灯
- 2021-03-01 19:00
本人的笨办法,求根公式:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,m,y;
double x;
while(cin>>n>>m && !(n==0&&m==0))
{
if(n*n-4*m<0) cout<<"No"<<endl;
else
{
x=sqrt(n*n-4*m);y=(int)sqrt(n*n-4*m);
if(x==(double)y) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}
- 2楼网友:迟山
- 2021-03-01 17:38
#include
#include
void main()
{
double n,m,x1,x2;
while(scanf("%lf %lf",&n,&m)==2)
{
if(n==0&&m==0) break;
x1=(n+sqrt(n*n-4*m))/2;x2=(n-sqrt(n*n-4*m))/2;
if(x1==(int)(x1)&&x2==(int)(x2))
printf("yes\n");
else printf("no\n");
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯