2016-12-01 5 views
0

私はコンピュータサイエンスのクラスで実験を行っている。宿題として割り当てられる。私はピタゴラスのトリプルがすべて1から入力された数になるようなプログラムを作るはずです。私はその部分をすることができると信じていますが、私は別の要件に混乱しています。入力した整数が偶数か奇数かをチェックし、a、b、cのGCFが1であることを確認しなければなりません。第二に、aが奇数ならば、bは偶数でなければならず、aが偶数ならばbは奇数でなければならず、cはa/bの組み合わせに対して奇数でなければならない。

説明: ネストループを使用して、1から提供された までのすべてのピタゴラスのトリプルを生成します。 3つの数字を3つにするには、いくつかの要件を満たす必要があります。最初に、3つの数字 は、a2 + b2 == c2 を満たす必要があります。第2に、もしaが奇数ならば、bは偶数でなければならず、aが偶数ならば、bは の奇数でなければならず、cはa/bの組み合わせに対して奇数でなければならない。最後に、a、b、およびcの最大公約数は、 は1より大きくない必要があります。

また、forループの最後に、三つ組を見つけるために、私は偶数か奇数かを調べようとしましたしかし、私はaが奇妙であるかどうかをチェックする方法を知らず、GCFの部分だけでなくbも同じです。私が間違いを犯した場合は私を修正し、私のコーディング割り当てを終了する方法について助言を与えてください。前もって感謝します!

マイコード:

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

あなたの先生は基本的に代わりにあれば提案したブロックを置く場合でも、奇数falseの場合、また、%2 == 1が真である、ピタゴラスの定理を使用しないようにあなたを語っています –

答えて

0

あなたは、B、Cは、B、Cはピタゴラスのトリプルいるかどうかをチェックif文の中に奇数であるかどうかをチェックするためのコードを置くことを検討すべきです。この方法では、プログラムはpythagoreanトリプルが偶数か奇数か、そして彼らのgcdが何であるかを調べるだけです。 数が偶数次のようになっている場合は、見つけることができます:

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

もう一つの方法は、このようなものです:

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

これは数が偶数か奇数であるか否かを判断する最後のビットに基づいて、それをチェックします。もう少し早いですが、先生が探している教科書の答えではないかもしれません(初期のCS学生を奇妙に見ています)。

次に、elseステートメントはすべての奇数の答えをキャッチします。また、if文にprintfの前にSystem.out.を忘れないでください。 forループの開始は、1から1までのテスト番号が割り当てられているため、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 

: あなたはどちらかの再帰が必要になりますユークリッドアルゴリズムは、(おそらくあなたの先生が念頭に置いていたではないものを)か、このように、1よりも高い数値をテストするためのループのために書くことができるとの最大公約数を見つけることができますサイドノート:gcdが最小のものより小さくなければならないので、forループ継続条件にa、b、またはcのいずれかを書くことができます。最小値よりも高い値をテストする(つまり、そのシナリオでbまたはcが最小の場合)、何も行われません。あなたは&&一緒に慣れていない場合

また、あなたはifif内部の内部ifとしてこれを書くことができます。

幸運

関連する問題