2016-12-01 135 views
0

我們一直在做我的計算機科學課的實驗,這是作爲作業分配。我應該製作一個程序,查找從1到所輸入數字的所有畢達哥拉斯三元組。我相信我可以做到這一點,但我對另一項要求感到困惑。我必須檢查我輸入的整數是偶數/奇數,還要確保a,b和c的GCF是1.下面是我的指令以及我迄今爲止編寫的代碼。其次,如果a是奇數,那麼b必須是偶數,如果a是偶數,那麼b必須是奇數,並且對於a/b組合中的c必須是奇數

說明: 使用嵌套循環生成所有的畢達哥拉斯三元組,從1到提供的 數字。對於三個數字來說,它們必須滿足幾個要求。首先,三元組中的三個數字 必須滿足a2 + b2 == c2 。第二,如果a是奇數,那麼b必須是偶數,如果a是偶數,則b必須是奇數,並且對於a/b組合,c必須是奇數。最後,a,b和c的最大公因式必須是 不得大於1.

另外,在我找到三元組for循環的最後,我試圖找出a是偶數還是奇數但我不知道如何檢查a是否奇怪,然後是b以及GCF部分。如果我犯了錯誤,請糾正我,並告訴我如何完成我的編碼任務。提前致謝!

我的代碼:

package chapter4; 

import java.util.*; 
/** 
* 
* @author Anthony 
*/ 
public class Triples { 

    public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 

     System.out.println("Choose a limit for the pythsgorean triplets"); 
     int limit = scan.nextInt(); 

     int a, b, c; 

     for (a = 0; a < limit; a++) { 

      for (b = 0; b < limit; b++) { 

       for (c = 0; c < limit; c++){ 
        if((Math.pow(a,2) + Math.pow(b, 2) == Math.pow(c, 2))) { 
         System.out.printf(" %d, %d, %d", a, b, c); 
        } 
       } 
      } 

      for (a = 0; a < limit; a++) { 
       if (a % 2) 
        printf("%d is odd\n", a); 
       else 
       printf("%d is even\n", a); 
      return 0; 
     } 
    } 
+0

你的老師基本上是告訴你不要用勾股定理,而不是把if塊,也有2%== 1爲真,如果是奇數的建議,假如果連 –

回答

0

你應該考慮把代碼來檢查A,B和C是否如果A,B和C是畢達哥拉斯三倍,它檢查if語句中有奇。這樣,該程序將只檢查畢達哥拉斯三元組,以查看它們是偶數還是奇數,以及它們的gcd是什麼。 你可以找到一個數是偶數這樣的:

if (a % 2 == 0) System.out.println("a is even"); 

另一種方法是這樣的:

if ((a & 1) == 0) System.out.println("a is even"); 

這將檢查它的基礎上最後一位確定是否數爲偶數或奇數。它有點快,但可能不是你的老師正在尋找的教科書答案(這對於早期的CS學生來說很奇怪)。

然後,else語句將捕獲所有奇怪的答案。另外,在if語句中,請不要忘記System.out.之前printf。 您還應該考慮從1開始for循環,因爲該作業可以測試從1到極限的數字。 您可以找到GCD或者與歐幾里德算法,這將需要遞歸(你的老師腦子裏想的可能不是什麼),或者你可以寫一個for循環測試更高的數字大於1,這樣的:

int gcd = 1; 
for (int count = 2; count < a; count++){ 
    if (a % count == 0 && b % count == 0 && c % count == 0) gcd = count; 
}//close the for loop 

附註:您可以在for循環連續條件中寫入a,b或c,因爲gcd必須小於最小值。測試值高於最小值(即,如果b或c是該場景中最小的值)將不會執行任何操作。

或者,如果你不熟悉&&一起,你可以寫爲if內的ifif內。

好運

相關問題