Description
With given integers a,b,c, you are asked to judge whether the following statement is true: "For any x, if a x2 +b⋅x+c=0, then x is an integer."
Input
The first line contains only one integer T(1≤T≤2000), which indicates the number of test cases.
For each test case, there is only one line containing three integers a,b,c(−5≤a,b,c≤5).
Output
or each test case, output “YES
” if the statement is true, or “NO
” if not.
Sample Input
3
1 4 4
0 0 1
1 3 1
Sample Output
YES
YES
NO
题意:给定三个整数 a, b, c,判断方程 ax^2+bx+c=0的解是否全部为整数。
注意:当此方程无解的时候,输出 YES ;当x可以为任意数时,输出 NO ,因为输出YES的前提是所有的x都必须为整数,而当x为任意数时,x也可以不是整数。
注意考虑a=0,b=0,c=0的情况!当时因为这个地方W了无数次(T﹏T)。
代码如下 :
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int t,a,b,c;
cin >> t;
while(t--)
{
cin >> a >> b >> c;
if(a==0)
{
if(b==0)
{
if(c==0)
cout << "NO" << endl; //此情况x为任意数,不全是整数,输出 NO
else
cout << "YES" << endl ; //此情况无解,输出 YES
}
else
{
double p;
if((-c)%b==0)
cout << "YES" << endl ; // 有一个解且为整数,YES
else
cout << "NO" << endl; // 有一个解但不是整数,NO
}
}
else
{
int k;
k=b*b-4*a*c; //判别式
if(k<0)
cout << "YES" <<endl;
if(k==0)
{
double p;
p=(-b+sqrt(k))/2.0/a; //求根公式
if(p==(int)p ) //判断是否为整数
cout << "YES" <<endl ;
else
cout << "NO" << endl ;
}
if(k>0)
{
double c1,c2;
c1=(-b+sqrt(k))/2.0/a;
c2=(-b-sqrt(k))/2.0/a;
if(c1==(int)c1&&c2==(int )c2) //判断是否为整数
cout << "YES" << endl;
else
cout << "NO" << endl ;
}
}
}
return 0;
}