#include

2017年ACM第八届山东省赛F题:quadratic equation(离散数学蕴含式)

F题:quadratic equation

时间限制: 2 秒  内存限制: 128 MB  |  提交: 277  解决: 44 

题目描述

With given integers a,b,c, you are asked to judge whether the following statement is true: "For any x, if ax2+bx+c=0, then x is an integer."

输入

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).

输出

or each test case, output “YES” if the statement is true, or “NO” if not.

样例输入

3
1 4 4
0 0 1
1 3 1

样例输出

YES
YES
NO
题意:判断"For any x, if ax2+bx+c=0, then x is an integer."是否成立
   前件:For any x, if ax2+bx+c=0成立 (方程有解)
   后件:then x is an integer.成立 (解是整数)
   离散数学 p 为前件 q 为后件 的蕴含式 只有前件为 T 后件 为 F 时事件才为 F
#include <cstdio>
#include <cmath>
 
bool judge(int a , int b , int c){
     
    if(a==0){
        if(b==0){
            if(c==0){
                return false ; // 此时x可以取 任何值 不成立
            } 
            return true ;  
        } else if(c%b==0){
            return true ;  
        } 
        return false ; // 
    } 
    double d = b*b - 4 * a * c ; 
    int D = (int)sqrt(d) ;
    if(d < 0){
        return true ; 
    }
  
    if(fabs(D - sqrt(d)) < 0.00000001){
     
        if((0-b+D)%(2*a)==0 ){
             
            if((0-b-D)%(2*a)==0)
                return true ; 
        }
         
         
    }
     
    return false ; 
}
 
int main(){
    int t ; 
    int a , b , c ; 
    scanf("%d" , &t) ; 
    while(t--){
        scanf("%d%d%d" , &a , &b , &c) ; 
          
        if(judge(a , b , c)){
            printf("YES\n") ; 
        } else {
            printf("NO\n") ; 
        }
     
    }
 
    return 0 ; 
}

 

#include<stdio.h>
#include<math.h>
int main(void)
{
    int T, a, b, c;
    double x;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d%d", &a, &b, &c);
        if(a==0 && b==0 && c==0)
            printf("NO\n");
        else if(a==0 && b==0)
            printf("YES\n");
        else if(a==0)
        {
            if(c%b==0)
                printf("YES\n");
            else
                printf("NO\n");
        }
        else if(b*b-4*a*c<0)
            printf("YES\n");
        else
        {
            x = sqrt(1.0*b*b-4*a*c);
            if((-b+x)/(2*a)-(int)(-b+x)/(2*a)==0 && (-b-x)/(2*a)-(int)(-b-x)/(2*a)==0)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

 



posted @ 2017-10-06 15:00  0一叶0知秋0  阅读(310)  评论(0编辑  收藏  举报