2014-10-01 21 views
3

我必須找到所有具有值「c」(其中c是斜邊)的畢達哥拉斯三元組,小於用戶輸入的整數值。我能夠做到這一點,但是我也必須打印哪個三元組具有最大的「c」值。如何打印具有最大斜邊的畢達哥拉斯三元組

# include <stdio.h> 

int main() 
{ 
    int i=1, N, a, b, c; 

    printf("Please enter an integer number: "); 
    scanf("%d", &N); 

    for(c=1; c<N; c++) 
    { 
     for(b=1; b<c; b++) 
     { 
      for(a=1; a<b; a++) 
      { 
       if((a*a)+(b*b)==(c*c)) 
       { 
        printf("\n%d.(%d,%d,%d)\n", i++, a, b, c); 
       } 
      } 
     } 
    } 

    printf("\nThere are %d triples which contain a c<N.\n\n", (i++)-1); 

    system("PAUSE"); 
    return(0); 
} 
+0

以上代碼的哪些部分不起作用?請明確點。 – 2014-10-01 02:32:42

+0

您在最終的'printf'語句中不需要'i ++'。只需使用'我'。它不會對代碼產生任何影響,除非你在這個語句之後使用'i'的值,這就使得它更難以閱讀。 – 2014-10-01 02:41:50

+0

代碼運行良好,我只是不知道該如何在代碼末尾打印句子「發現c值最大的三元組是(?,?,?)。換句話說,我不知道 the1whoknocks 2014-10-01 02:44:00

回答

2

你可以有一個變量來記住最大的c。下面註釋行加入,一起來看看:

int largest_c = 0; //define it 
for(c=1; c<N; c++) 
{ 
    for(b=1; b<c; b++) 
    { 
     for(a=1; a<b; a++) 
     { 
      if((a*a)+(b*b)==(c*c)) 
      { 
       if (c > largest_c) { //found a bigger one, so remember it 
        largest_c = c; 
       } 
       printf("\n%d.(%d,%d,%d)\n", i++, a, b, c); 
      } 
     } 
    } 
} 

順便說一句,有一個小竅門,你可以很容易地加速你的算法:任何時候,你發現了一個^ 2 + B^2> = C^2,你可以立即跳過其餘的內部循環。還有其他一些方法可以進一步加速算法。

+0

好吧,非常感謝!!這就是說,我使用最大的「a」和最大的「b」相同的原則?我想打印包含最大c的整個三元組結尾! – the1whoknocks 2014-10-01 02:44:44

+0

我設法解決了我的問題。謝謝!! – the1whoknocks 2014-10-01 02:49:36

+0

真棒,玩得開心! – 2014-10-01 02:51:04

相關問題