兩個數的平方和

2022-09-04 05:03:11 字數 858 閱讀 6328

給出乙個整數n,將n表示為2個整數i j的平方和(i <= j),如果有多種表示,按照i的遞增序輸出。

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

乙個數n(1 <= n <= 10^9)

共k行:每行2個數,i j,表示n = i^2 + j^2(0 <= i <= j)。

如果無法分解為2個數的平方和,則輸出no solution

130

3 11

7 9

這題的思路看似簡單卻又不簡單,遍歷?還是啥方法?選擇演算法的過程最為複雜。最害怕的是超時,這種題目被超時坑的簡直不敢敲了。

下面的**思想很好,遍歷x,那麼直接求sqrt(n-x*x)同時3為了防止重複,用陣列記錄可能的所有數,再比對,如果遇到相同的時候就結束。思維很是巧妙。

#include #include using namespace std;

int a[100001];

int test(int x,int l)

{ int flag=0;

for(int i=0;i>n)

{ m=(int)sqrt((double)n/2);

flag=0;l=0;

for(int i=0;i<=m;i++)

{x=i;

y=(int)sqrt((double)(n-i*i));

if(x*x+y*y==n)

{ a[l]=y;

c=test(x,l);

l++;

if(c==0)

{cout<

1080 兩個數的平方和

1080 兩個數的平方和 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數n,將n表示為2個整數i j的平方和 i j 如果有多種表示,按照i的遞增序輸出。例如 n 130,130 3 2 11 2 7 2 9 2 注 3 11同11 3算1種 inpu...

1080 兩個數的平方和

1080 兩個數的平方和 github 點這 給出乙個整數n,將n表示為2個整數i與j的平方之和 i j 如果有多種表示,按照i的遞增序輸出。例如 n 130,130 3 2 11 2 7 2 9 2 注 3 2 11 2同11 2 3 2算1種 input 乙個數n 1 n 10 9 output...

51nod 1080 兩個數的平方和

1080 兩個數的平方和 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數n,將n表示為2個整數i j的平方和 i j 如果有多種表示,按照i的遞增序輸出。例如 n 130,130 3 2 11 2 7 2 9 2 注 3 11同11 3算1種 inpu...