用c语言求20以内的勾股数,C语言求勾股数代码及解析
問題描述
求150以內的所有勾股數。
所謂勾股數,是指能夠構成直角三角形三條邊的三個正整數(a,b,c)。
問題分析
根據“勾股數”定義,所求三角形三邊應滿足條件 a2 + b2 = c2??梢栽谒蠓秶鷥壤酶F舉法找出滿足條件的數。
算法分析
采用窮舉法求解時,最容易想到的一種方法是利用3個循環語句分別控制變最a、b、c的取值范圍,第1層控制變量a,取值范圍是1?100。在a值確定的情況下再確定b值,即第2層控制變量b,為了避免結果有重復現象,b的取值范圍是a+1?150。a、b的值已確定,利用窮舉法在b+1?150范圍內一個一個的去比較,看當前c值是否滿足條件 a2?+ b2?= c2,若滿足,則輸出當前a、b、c的值,否則繼續尋找。主要代碼如下:
//...
for(a=l; a<=100; a++)? /*確定a的取值*/
for(b=a+l; b<=100; b++)? /*確定b的取值*/
for(c=b+l; c<=100; c++)? /*確定c的取值*/
if(a*a+b*b==c*c)
printf ("%d\t%d\t%d\n", a, b, c)? /*判斷三個變量是否滿足勾股數條件*/
//...
但是上述算法的效率比較低,根據 a2 + b2 = c2 這個條件,在a、b值確定的情況下,沒必要再利用循環一個一個去尋找c值。若a、b、c是一組勾股數,則 a2 + b2 的平方根一定等于c,c的平方應該等于a、b的平方和,所以可將的平方根賦給c,再判斷c的平方是否等于。根據“勾股數”定義將變量定義為整型,a2 + b2 的平方根不一定為整數, 但變量c的類型為整型,將一個實數賦給一個整型變量時,可將實數強制轉換為整型(舍棄小數點之后的部分)然后再賦值,這種情況下得到的c的平方與原來的的值肯定不相等,所以可利用這一條件進行判斷。
下面是完整的代碼:
#include
#include
int main()
{
int a, b, c, count=0;
printf("150以內的勾股數有:\n");
printf("? a? ? b? ? c? ? ? a? ? b? ? c? ? ? a? ? b? ? c? ? ? a? ? b? ? c\n");
/*求150以內勾股數*/
for(a=1; a<=150; a++)
for(b=a+1; b<=150; b++)
{
c=(int)sqrt(a*a+b*b);? /*求c值*/
if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=150)? /*判斷c的平方是否等于a2+b2*/
{
printf("%4d %4d %4d? ? ", a, b, c);
count++;
if(count%4==0)? /*每輸出4組解就換行*/
printf("\n");
}
}
printf("\n");
return 0;
}
運行結果:
150以內的勾股數有:
a? ? b? ? c? ? ? a? ? b? ? c? ? ? a? ? b? ? c? ? ? a? ? b? ? c
3? ? 4? ? 5? ? ? ? 5? 12? 13? ? ? ? 6? ? 8? 10? ? ? ? 7? 24? 25
8? 15? 17? ? ? ? 9? 12? 15? ? ? ? 9? 40? 41? ? ? 10? 24? 26
11? 60? 61? ? ? 12? 16? 20? ? ? 12? 35? 37? ? ? 13? 84? 85
14? 48? 50? ? ? 15? 20? 25? ? ? 15? 36? 39? ? ? 15? 112? 113
16? 30? 34? ? ? 16? 63? 65? ? ? 17? 144? 145? ? ? 18? 24? 30
18? 80? 82? ? ? 20? 21? 29? ? ? 20? 48? 52? ? ? 20? 99? 101
21? 28? 35? ? ? 21? 72? 75? ? ? 22? 120? 122? ? ? 24? 32? 40
24? 45? 51? ? ? 24? 70? 74? ? ? 24? 143? 145? ? ? 25? 60? 65
27? 36? 45? ? ? 27? 120? 123? ? ? 28? 45? 53? ? ? 28? 96? 100
30? 40? 50? ? ? 30? 72? 78? ? ? 32? 60? 68? ? ? 32? 126? 130
33? 44? 55? ? ? 33? 56? 65? ? ? 35? 84? 91? ? ? 35? 120? 125
36? 48? 60? ? ? 36? 77? 85? ? ? 36? 105? 111? ? ? 39? 52? 65
39? 80? 89? ? ? 40? 42? 58? ? ? 40? 75? 85? ? ? 40? 96? 104
42? 56? 70? ? ? 42? 144? 150? ? ? 44? 117? 125? ? ? 45? 60? 75
45? 108? 117? ? ? 48? 55? 73? ? ? 48? 64? 80? ? ? 48? 90? 102
48? 140? 148? ? ? 50? 120? 130? ? ? 51? 68? 85? ? ? 51? 140? 149
54? 72? 90? ? ? 55? 132? 143? ? ? 56? 90? 106? ? ? 56? 105? 119
57? 76? 95? ? ? 60? 63? 87? ? ? 60? 80? 100? ? ? 60? 91? 109
63? 84? 105? ? ? 64? 120? 136? ? ? 65? 72? 97? ? ? 66? 88? 110
66? 112? 130? ? ? 69? 92? 115? ? ? 72? 96? 120? ? ? 75? 100? 125
78? 104? 130? ? ? 80? 84? 116? ? ? 81? 108? 135? ? ? 84? 112? 140
87? 116? 145? ? ? 88? 105? 137? ? ? 90? 120? 150? ? ? 96? 110? 146
100? 105? 145
總結
以上是生活随笔為你收集整理的用c语言求20以内的勾股数,C语言求勾股数代码及解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机 听广播 不用 耳机 android
- 下一篇: ps调色滤镜库:ON1 Effects