xtu oj 1520 方程组

题目描述

xtu oj 1520 方程组_第1张图片

,其中x≤y 的整数解。

输入格式

第一行是一个整数T (1≤T≤1000),表示样例的个数。 第二行是两个整数n, n∈[−109,109]和m, m∈[0,109]。

输出格式

依次输出一个样例的结果。 输出一行,为两个整数,之间用一个空格隔开;如果不存在解,输出”0”。

样例输入

3
1 1
2 2
1 0

样例输出

0 1
1 1
0

AC代码

#include
#include
//判断是否是平方数 
int Judge(int n){
	int flag=0;
    int i=sqrt(n);
	if(i*i==n){
		flag=1;
	} 
	return flag;
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,m,x,y,flag=1;
        scanf("%d%d",&n,&m);
        int t=(int)sqrt(m);
        for(x=-t;x<=t;x++){//注意x的范围 
            if(Judge(m-x*x)){
            	int y=sqrt(m-x*x);
            	if(x*x*x+y*y*y==n){
            		printf("%d %d\n",x,y);
            		flag=0;
            		break;
				}
				if(x*x*x-y*y*y==n){//负数的情况 
            		printf("%d %d\n",x,-y);
            		flag=0;
            		break;
				}
			}
        }
        if(flag)printf("0\n");
    }
}

解题思路:t=sqrt(m),x的范围从-t到t,判断m-x*x是否为平方数,若是,代入立方式验证结果,注意考虑y为负数的情况。

你可能感兴趣的:(算法,c#,c语言)