接下來這道題目用稱爲”暴力法“的思想來解決,目前我對”暴力法“的認識還處於初級階段,可能是對暴力法能使用的判斷條件還不是很明白
=========================================================================================================
題目描述:
著名的數學家畢達哥拉斯可能從來都不曾想過有人居然會問他這樣的一個問題:給出一個整數,存在多少個直角三角形,它的某一條邊的長度等於這個整數,而且其他邊的長度也是整數。既然畢達哥拉斯不可能預見到有計算機的出現,如果他回答不出來,那誰又能責怪他呢?但是現在既然你有了計算機,那麼回答不出來就說不過去了。
輸入格式
第一行有一個整數n,代表有多少個數據(1<=n<=20)。接下來有n行,每行代表一個數據。一個數據就是一個整數ai(a<=i<=n,1<=ai<=100)。
輸出格式
每個數據都必須有相應的輸出。兩個數據的輸出之間有一個空行。最後一個測試數據的輸出後不要加空行。
對於每一個數據,如果找不到解,則輸出一個空行。如果找到解,就把符合條件的所有直角三角形輸出。每個三角形佔一行,輸出該三角形的另外兩條邊,必須先輸出長邊,然後一個逗號,再輸出短邊。兩個三角形之間不能有空行,而且必須按照長邊降序排列。
輸入樣例
2
20
12
輸出樣例
101,99
52,48
29,21
25,15
16,12
37,35
20,16
15,9
13,5
=========================================================================================================
=========================================================================================================
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
bool isRight(int m, int n)//判斷第三條邊是否可以滿足直角三角形的條件
{
int tmp = sqrt(abs((double)m*m - n*n));
return tmp == sqrt(abs((double)m*m - n*n)) && tmp != 0;
}
int main()
{
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
for (int i = ( n * n + 1 ) / 2; i >= 1; --i) {
if (isRight(i, n) && i >= (int)sqrt(abs((double)i*i - n*n))) {
printf("%d,%d\n", i, (int)sqrt(abs((double)i*i - n*n)));
}
}
if (t != 0)
printf("\n");
}
return 0;
}
=========================================================================================================