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