2016-12-01 3 views
0

Мы проводили лабораторные занятия в классе компьютерных наук, и это было назначается как домашнее задание. Я должен сделать программу, в которой все пифагорейские тройки от 1 до введенного числа. Я считаю, что могу сделать эту часть, но я смущен другим требованием. Я должен проверить, являются ли эти целые числа четными/нечетными, а также убедитесь, что GCF a, b и c: 1. Ниже приведены мои инструкции ниже вместе с кодом, который я написал до сих пор.Во-вторых, если a нечетно, b должно быть четным, а если a четно, тогда b должно быть нечетным, а c должно быть нечетным для комбинации a/b.

Инструкции: Используйте вложенные петли для генерации всех пифагорейских троек от 1 до предоставленного номера . Для трех чисел, которые должны быть тройными, они должны удовлетворять нескольким требованиям. Во-первых, три числа в тройке должны удовлетворять условию a2 + b2 == c2 . Во-вторых, если a нечетно, b должно быть четным, а если a четным, то b должно быть нечетным, а c должно быть нечетным для комбинации a/b. Наконец, наибольший общий коэффициент a, b и, c должен быть не более 1.

Кроме того, в конце моего цикла для поиска триплетов я попытался найти, был ли четный или нечетный но я не знаю, как проверить, является ли он нечетным, а значит, 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; 
     } 
    } 
+0

You учитель в основном говорит вам не использовать теорему Пифагора, вместо того, чтобы поставить предложил, если блоки, также% 2 == 1 истинно, если нечетное, ложь, если даже –

ответ

0

Вы должны рассмотреть вопрос о создании кода, чтобы проверить, являются ли, Ь и с нечетными внутри, если заявлением, которое проверяет, если а, Ь и с является Пифагором тройными. Таким образом, программа будет проверять только pythagorean троек, чтобы увидеть, являются ли они четными или нечетными и каков их gcd. Вы можете найти, является ли число даже так:

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

Другой способ, как это:

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

Это проверяет его на основе последнего бита, который определяет, является ли число четным или нечетным , Это немного быстрее, но, возможно, не ответ на учебник, который ищет ваш учитель (это странно ищет ранних студентов CS).

Тогда заявление else будет содержать все нечетные ответы. Кроме того, не забудьте свой System.out. до printf в ваших операторах if. Вы также должны рассмотреть возможность запуска ваших циклов 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 

Замечание: вы можете написать a, b или c в условии продолжения цикла, потому что gcd должен быть меньше самого маленького. Тестирование значений выше наименьшего (т. Е. Если b или c является наименьшим для этого сценария) ничего не сделает.

В качестве альтернативы, вы можете написать это как if внутренней части if внутри из if, если вы не знакомы с && вместе.

удачи

Смежные вопросы