有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

第二,如果a是奇数,b必须是偶数,如果a是偶数,那么b必须是奇数,对于a/b组合,c必须是奇数

在我的计算机科学课上,我们一直在做实验,这是我的家庭作业。我应该做一个程序,找到从1到输入的数字的所有毕达哥拉斯三元组。我相信我能做到这一点,但我对另一个要求感到困惑。我必须检查我输入的整数是否为偶数/奇数,还要确保a、b和c的GCF为1。下面是我的说明以及我迄今为止编写的代码

说明: 使用嵌套循环生成从1到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;
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    你应该考虑在if语句中检查A、B和C是否为奇数,其中检查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.之前的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内的if内的if

    祝你好运