杭电2092

一开始以为是找规律的题,死活没有找出输入数nm的关系,后面看了讨论区发现直接按照解二元一次方程的方式做就好了

即{x+y=n, x*y=m

这样可以得-x+n*x-m=0,再判断这个方程是否有整数解就能知道该题输入的结果

题目很水,但是这种直接和数学结合的题目我做的比较少,没有这类思想去想到直接用数学的方式写就好了,思维太局限于死板地用蛮力代码实现

#include<stdio.h>
#include<math.h>

int main(void){
    int n, m;
    int b, a, c;
    float x1, x2;
    while(~scanf("%d%d", &n, &m) && (m||n)){
        b = n;
        a = -1;
        c = m*(-1);
        x1 = b*(-1)+sqrt(b*b-4*a*c);
        x2 = b*(-1)-sqrt(b*b-4*a*c);
        if((x2-(int)x1)==0 || (x2-(int)x2)==0)
            printf("Yes
");
        else
            printf("No
");
    }
        
    return 0;
}
原文地址:https://www.cnblogs.com/ssNiper/p/11113201.html