藍橋盃國賽 勾股定理

2021-09-22 16:29:49 字數 1178 閱讀 3764

勾股定理,西方稱為畢達哥拉斯定理,它所對應的三角形現在稱為:直角三角形。

已知直角三角形的斜邊是某個整數,並且要求另外兩條邊也必須是整數。

求滿足這個條件的不同直角三角形的個數。

【資料格式】

輸入乙個整數 n (0例如,輸入:

5程式應該輸出:

1再例如,輸入:

100程式應該輸出:

2再例如,輸入:

3程式應該輸出:

0資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

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

注意: main函式需要返回0

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

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

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

見網上大佬都是使用的平方差來做的,蒟蒻就發表一下打表的題解吧

解題思路:

先打表記錄1-n的平方值(因為n<10000000,所以使用long long),然後使用雙指標從1和n-1雙向遍歷就行了。具體細節如下所示

n=5,則1-5的平方為 ,開始時left指向下標為1的元素1,right指向下標為4(n-1)的元素16,1+16<25,代表當前的兩邊之和小於5的平方,那麼只需要增大兩邊之和,那麼left++。指向 4,4+16=20<25,left--,到left指向9時,此時 9+16=25,符合條件,則sum++,right--,left++;如果left和right下標之元素之和大於25時,則代表兩邊之和過大,需要縮小,則,right--,直到left>right.結束迴圈。

**如下.

#include #include using namespace std;

long long a[10000005];

int main()

//cout

while(left<=right)else if(a[left]+a[right]right--;

} cout

}

藍橋盃國賽

過去挺久了,最近也荒廢了挺久,終於有時間來寫寫回憶吧 也要重新開始看演算法開始刷題了,只有努力才會有好運 題解啥的也不說了吧,網上應該挺多,當時填空題除了兩個,大題兩個應該只有部分分,混了個國三,今年題目多也變難了點,自己還是太菜。其實最想說的是第二題和第三題,第二題居然沒想到是揹包。在這個題中猶豫...

藍橋盃國賽總結

國三划水 怎麼說呢,這屆藍橋杯的題有點複雜,原來國賽都是6道題,今年一下子變成了10道題,然後沒乙個題可以暴力的,尷尬,我做的2016 2018年的國賽題,哎,基本沒用,現在大多數是在考思維,明顯的考演算法的比較少。本來至少可以拿國二的,前兩個小時搞掉了2小1大,但是後來每一道題到不簡單,但深入做肯...

2016屆藍橋杯省賽B組 第5題 勾股定理

勾股定理,西方稱為畢達哥拉斯定理,它所對應的三角形現在稱為 直角三角形。已知直角三角形的斜邊是某個整數,並且要求另外兩條邊也必須是整數。求滿足這個條件的不同直角三角形的個數。資料格式 輸入乙個整數 n 0 n 10000000 表示直角三角形斜邊的長度。要求輸出乙個整數,表示滿足條件的直角三角形個數...