这个题本身想的方式很难受,但是后来想来想到了两个方程,联立,求判别式,并且判断判别式是否大于等于0,而且要根据最后的结果判定x的值是否是整数。
这是根的表达式,根据解题思路,首先判定判别式大于或等于0,然后分别求即可。另外还要注意一点,n和m有可能一个是0另外一个不是0,这个情况也要考虑到。比如0 -1也是成立的。
#include <stdio.h>
#include <math.h>
int test(double x){
if((int)x == x){
return 1;
}
return 0;
}
int main() {
int n,m;
while(scanf("%d%d",&n,&m) !=EOF ){
if(n==0 && m==0){
return 0;
}
int sqrt3 = n*n -4*m;
if( sqrt3 >= 0){
//若判别式大于等于0才有效
double q3 = sqrt(sqrt3);
if(test(q3) ==1){
//若是整数
//则判断最后的根
if( test(0-m-q3) == 1 || test(q3-m) ==1 ){
printf("Yes\n");
}else{
printf("No\n");
}
}else{
printf("No\n");
}
}else{
printf("No\n");
}
}
return 0;
}