【问题标题】:Second, if a is odd, b must be even and if a is even, then b must be odd, and c must be odd for either a / b combination其次,如果 a 是奇数,b 必须是偶数,如果 a 是偶数,则 b 必须是奇数,c 对于 a / b 组合中的任何一个都必须是奇数
【发布时间】:2016-12-01 03:30:31
【问题描述】:

我们一直在我的计算机科学课上做实验,这是作为家庭作业分配的。我应该制作一个程序来查找从 1 到输入数字的所有毕达哥拉斯三元组。我相信我可以做到这一点,但我对另一个要求感到困惑。我必须检查我输入的整数是否是偶数/奇数,还要确保 a、b 和 c 的 GCF 为 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;
        }
    }

【问题讨论】:

  • 你老师基本上是在告诉你不要使用勾股定理,而是把建议的 if 块,a % 2 == 1 如果 a 是奇数则为真,如果是偶数则为假

标签: java nested-loops pythagorean


【解决方案1】:

您应该考虑在检查 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 语句中 printf 之前的 System.out.。 您还应该考虑从 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 是该场景中的最小值)将无济于事。

或者,如果您不熟悉 &amp;&amp; 连词,您可以将其写为 if 内的 if 内的 if

祝你好运

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2016-10-05
    • 2011-03-09
    • 1970-01-01
    • 2016-04-26
    • 2019-04-16
    相关资源
    最近更新 更多