其次,如果a是奇数,b必须是偶数,如果a是偶数,那么b必须是奇数,并且对于a / b组合,c必须是奇数

时间:2016-12-01 03:30:32

标签: java nested-loops pythagorean

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

说明: 使用嵌套循环生成所有毕达哥拉斯三元组,从1到提供 数。要使三个数字成为三元组,它们必须满足几个要求。首先是三个数字 在三元组中必须满足a2 + b2 == c2 。其次,如果a是奇数,b必须是偶数,如果a是偶数,那么b必须是 对于a / b组合,奇数和c必须是奇数。最后,a,b和c的最大公因子必须 不超过1。

此外,在我的for循环结束时找到三元组,我试图找到一个是偶数还是奇数但我不知道如何检查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 个答案:

答案 0 :(得分:0)

你应该考虑把代码放在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之前的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循环设置为1,因为赋值可以测试从1到限制的数字。 您可以使用Euclidean算法找到gcd,这将需要递归(可能不是您老师的想法)或者您可以编写for循环来测试高于1的数字,如下所示:

if

附注:您可以在for循环连续条件中写入a,b或c,因为gcd必须小于最小值。测试值高于最小值(即如果b或c是该场景中最小的值)将无效。

或者,如果您不熟悉if连词,则可以在if&&内写var a = 1+1+'2'; console.log(a); > 22 var a = 1+1+'2'+7; console.log(a); > 227 var a = 1+1+'2'+7+10; console.log(a); > 22710 var a = 1+1+'2'+7+10-2; console.log(a); > 22708

祝你好运