0

私たちはコンピューター サイエンスのクラスでラボを行っており、これは宿題として割り当てられました。1 から入力された数までのすべてのピタゴラス数を見つけるプログラムを作成することになっています。私はその部分を行うことができると信じていますが、別の要件について混乱しています. 入力した整数が偶数か奇数かを確認し、a、b、c の GCF が 1 であることを確認する必要があります。以下に、これまでに作成したコードと一緒に私の手順を示します。

手順: ネストされたループを使用して、1 から指定された数までのすべてのピタゴラス数を生成します。3 つの数がトリプルになるには、いくつかの要件を満たす必要があります。まず、トリプルの 3 つの数値が a2 + b2 == c2 を満たす必要があります。次に、a が奇数の場合、b は偶数でなければならず、a が偶数の場合、b は奇数でなければならず、c は a / b のいずれかの組み合わせに対して奇数でなければなりません。最後に、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;
        }
    }
4

1 に答える 1

0

a、b、および c がピタゴラス数であるかどうかをチェックする if ステートメント内に、a、b、および c が奇数かどうかをチェックするコードを配置することを検討する必要があります。このようにして、プログラムはピタゴラスのトリプルのみをチェックして、それらが偶数か奇数か、およびそれらの 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.beforeを忘れないでください。printfまた、for ループを 1 から開始することも検討する必要があります。これは、割り当てによって 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

補足: gcd は最小のものよりも小さくなければならないため、for ループの継続条件に a、b、または c のいずれかを記述できます。最小値よりも大きい値をテストしても (つまり、b または c がそのシナリオで最小の場合)、何も実行されません。

または、接続詞に慣れていない場合は、これをifinside of an ifinside of anと書くこともできます。if&&

幸運を

于 2016-12-01T03:57:08.647 に答える