2016-11-23 43 views
-2

我想要一個程序,當存在這樣的正整數ab時返回true,使得a*a+b*b=n*n如果總和存在真/假功能

我的代碼是:

bool c(int n){ 
    int b=1; 
    int a=1; 
    for (a=1; a<=n; a++) { 
     for (b=a; b<=n; b++) { 
      if (a*a + b*b == n*n) { 
       return true; 
      else 
       return false; 
     } 
    } 

} 

但是這個代碼不回什麼,我想它。我能做些什麼來解決這個問題?

請大家在投票前請解釋一下在這個問題上可以改進的地方。我注意到有時人們傾向於在沒有任何解釋的情況下投票回答問題。

+0

如果條件從未如此,該怎麼辦?那你什麼時候回來? –

+1

步驟#1 - 在所有代碼路徑中使函數返回。步驟#2 - 使用調試器。另外,在哪裏定義了「c」? –

+0

步驟#2 - 使用變量'n'。 –

回答

2

你的程序不能編譯。你可能打算這樣寫:

bool c(int n) { 
    int b = 1; 
    int a = 1; 
    for (a = 1; a <= n; a++) { 
    for (b = a; b <= n; b++) { 
     if (a*a + b*b == n*n) 
     return true; 
     else 
     return false; 
    } 
    } 
} 

哪個編譯,哪個是錯的。

但你可能想要這個:

bool myfunction(int n) { 
    int b = 1; 
    int a = 1; 
    for (a = 1; a <= n; a++) { 
    for (b = a; b <= n; b++) { 
     if (a*a + b*b == n*n) 
     return true; 
    } 
    } 

    return false; 
} 

int main() { 
    if (myfunction(5)) { 
    printf("myfunction(5) returned true\n"); 
    } 
} 
2
bool c(int n){ 
int b=1; 
int a=1; 
for (a=1; a<=n; a++) { 
    for (b=a; b<=n; b++) { 
     if (a*a + b*b == n*n) { 
      return true; 
     else 
      return false; 
    } 
} 
} 

你寫將檢查= 1,B = 1的代碼和計算結果爲1 + 1等於2

所以,你的代碼所做的只是將2與n進行比較。

return false語句應該在for循環之外。 這意味着對於a和b的所有組合,不存在對(a,b),使得a = b * n = n * n。