2016-12-01 5 views
0

우리는 컴퓨터 과학 수업에서 실험실 작업을 해왔습니다. 숙제로 배정 받았다. 피타고라스의 모든 트리플을 1에서 입력 된 숫자로 찾는 프로그램을 만들어야합니다. 나는 그 부분을 할 수 있다고 믿지만 또 다른 요구 사항에 혼란 스럽다. 입력 한 정수가 짝수/홀수인지 확인하고 a, b 및 c의 GCF가 1인지 확인해야합니다. 여기에 지금까지 작성한 코드와 함께 아래 지침이 있습니다.두 번째, a가 홀수이면 b는 짝수 여야하고 a가 짝수이면 b는 홀수 여야하고 c는 a/b 조합에 대해 홀수 여야합니다.

지침 : 피타고라스 식 트리플을 모두 1에서 최대 제공된 까지 생성하려면 중첩 루프를 사용하십시오. 3 개의 숫자가 트리플이 되려면 몇 가지 요구 사항을 충족시켜야합니다. 첫째, 세 개의 숫자 은 a2 + b2 == c2 을 만족해야합니다. 둘째, a가 홀수이면 b는 짝수 여야하고 a가 짝수이면 b는 홀수이어야하고 a/b 조합에 대해서는 c가 홀수 여야합니다. 마지막으로 a, b 및 c의 가장 큰 공통 요소는 이어야하며 1보다 크지 않아야합니다.

또한 for 루프가 끝날 때 세 쌍을 찾으려면 짝수 또는 홀수인지 찾아야했습니다. 하지만 이상한지를 확인하는 방법을 모른다면 GCF 부분뿐 아니라 b 부분도 있습니다. 실수로 코딩 작업을 완료하는 방법에 대해 조언을 해 주시면 문제를 해결해주십시오. 미리 감사드립니다!

내 코드 :

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

대신하는 경우도 거짓, a가 홀수 인 경우 블록, 또한 % 2 == 1에 해당하는 경우 제안 넣어 –

답변

0

당신은 A, B, C는 A, B, C는 피타고라스 트리플 경우 확인하는 if 문에서 홀수 여부를 확인하는 코드를 넣어 고려해야한다. 이 방법으로, 프로그램은 pythagorean 트리플을 확인하여 그들이 짝수 또는 홀수인지, 그리고 그들의 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 중 하나를 찾을 수 있습니다 또는 당신이 이런 식으로, 1보다 높은 숫자를 테스트하는 for 루프를 작성할 수 있습니다

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가 가장 작은 경우) 아무 것도 수행하지 않습니다. 당신이 && 함께 익숙하지 않다면

또는, 당신은 if의 내부 ifif 내부로 이것을 쓸 수 있습니다.

행운을 빌어 요 당신이 교사는 기본적으로 피타고라스 정리를 사용하지 않는 당신을 말하고있다