您的位置:首页 > 其它

51NOD 1080 两个数的平方和

2015-12-26 13:49 295 查看
给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。

例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)

Input
一个数N(1 <= N <= 10^9)


Output
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。
如果无法分解为2个数的平方和,则输出No Solution


Input示例
130


Output示例
3 11
7 9

这个题目用的是简单打表的方法,先把10^9中的所有平方数存在一个数组中,然后利用暴力加优化输出结果!

#include <stdio.h>
#define N 33333
typedef long long ll;
int main(){
ll a[N+1];
ll i,j,n,m,x;
int flag;
//计算10^9中的平方数
for(i=0;i<=N;i++)
a[i]=i*i;
while(scanf("%lld",&n)!=EOF){
flag=0;
x=N;
for(i=0;i<N;i++){
m=n-a[i];
//暴力查找匹配
for(j=x;j>=i;j--){
if(m==a[j]){
flag=1;
printf("%lld %lld\n",i,j);
x=j;
break;
}
}
//优化处理
if(i>x)
break;
}
if(flag==0)
printf("No Solution\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: