永发信息网

杭电2092题,迷惑,到底错在哪里??

答案:3  悬赏:0  手机版
解决时间 2021-03-02 03:32
#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);
}
最佳答案
怎么连分都不给一点啊。算了帮你看下好了。

算法错误,你搜索这两个整数怎么有一个数就向正方向搜索呢,那个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了。
全部回答
本人的笨办法,求根公式: #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; }
#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"); } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
被人骗过之后,如何才能尽快走出心里的阴影
色眼识人中,红色和黄色的数目一样,我是红色9,
宝马745的配置如何?
雅姿·软装生活馆在哪里啊,我有事要去这个地
恒峰汽车维修中心地址好找么,我有些事要过去
运动世界校园APP的功能强大吗
杭州梅家坞这个景区在那么样呢,在那边有住宿
抚养权诉讼可以在被监护人住所地起诉吗?有什
怒江大酒店在哪里啊,我有事要去这个地方
古原类别还有含义是什么 是语c圈的那个古原
完美漂移怎么结婚
金虎家私家居生活馆怎么去啊,有知道地址的么
师范院校毕业,没有教师资格证能在公立学校当
读图,按要求完成下列问题。(7分) (1)图中EF
下列句子中标点符号使用正确的一项是 [
推荐资讯
坦克世界啥车乘员最少
黄山落日的优美诗句语句
小蘑菇鸡煲吉庆街店地址在哪,我要去那里办事
陆的寨地址有知道的么?有点事想过去
高分求一个魔兽世界4.3 防御战士一键拉怪宏
宜春的:青龙,国光,比一比,洪客隆,步步高
刚刚认识狮子男就在你面前诉苦是什么意思?
【100左右的mp3】描写音乐的短文(100字左右)
什么是“竞业限制”?
请问闵行哪有比较好的打印店?可以打印180G A
求助,GTA5要在steam平台还是什么平台
你好我想问一下你说奔驰转向柱锁可以修,怎么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?