第七屆藍橋杯省賽B組 四平方和

2021-10-02 18:47:29 字數 1611 閱讀 4629

四平方和

四平方和定理,又稱為拉格朗日定理:

每個正整數都可以表示為至多4個正整數的平方和。

如果把0包括進去,就正好可以表示為4個數的平方和。

比如:5=0

^2+0

^2+1

^2+2

^27=

1^2+

1^2+

1^2+

2^2(^符號表示乘方的意思)

對於乙個給定的正整數,可能存在多種平方和的表示法。

要求你對4個數排序:

0<= a <= b <= c <= d

並對所有的可能表示法按 a,b,c,d 為聯合主鍵公升序排列,最後輸出第乙個表示法

程式輸入為乙個正整數n (n<

5000000

)要求輸出4個非負整數,按從小到大排序,中間用空格分開

例如,輸入:

5則程式應該輸出:00

12再例如,輸入:

12則程式應該輸出:02

22再例如,輸入:

773535

則程式應該輸出:11

267838

資源約定:

峰值記憶體消耗 <

256m

cpu消耗 <

3000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入.

..」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include <***>, 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別

知識點

總結:用四重迴圈暴力算的話,測試773535得不出結果。將4重迴圈變為2個迴圈,然後用map.find的時間複雜度為o

(logn)

(大概)

答案:https:

104095325

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

mapint> f;

ll a[4]

=;int k=3;

intmain()

}//上面和下面不能換位置,不能先進行a,b迴圈,再進行c,d迴圈。

//結果是希望a,b盡量小,c,d盡量大,下面的迴圈是進行匹配得出結果的,

//若先進行a,b迴圈,再進行c,d迴圈,c,d較小時就可以匹配到,而且此時a,b很大,然後就結束輸出結果了,這樣得出的結果就是錯的。

int flag=0;

for(a=

0;a*a<=n;a++)}

}if(flag)

break;}

return0;

}

第七屆藍橋杯省賽 四平方和

四平方和 四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。比如 5 0 2 0 2 1 2 2 2 7 1 2 1 2 1 2 2 2 符號表示乘方的意思 對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對4個...

第七屆藍橋杯省賽C A B組 四平方和

演算法標籤 二分,雜湊 題目描述 四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多 4 個正整數的平方和。如果把 0 包括進去,就正好可以表示為 4 個數的平方和。比如 5 02 02 12 22 7 12 12 12 22 對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對 4...

藍橋杯 第七屆藍橋杯省賽C A B組 四平方和

四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多 4 個正整數的平方和。如果把 0 包括進去,就正好可以表示為 4 個數的平方和。比如 5 0 2 0 2 1 2 2 2 7 1 2 1 2 1 2 2 2 對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對 44 個數排序 0 ...