Math

3-1: 다음수

SWC123 2018. 10. 24. 19:49

다음수 (nextnum.cpp)

 

문제


위키피디아에 따르면 등차수열(arithmetic sequence)은 연속하는 두 항의 차이가 모두 일정한 수열을 뜻한다. 예를 들어, 3, 5, 7, 9, 11, 13, ...은 차이가 2로 일정한 등차수열이다. 이때 두 항의 차이는 이 수열의 모든 연속하는 두 항들에 대해서 공통적으로 나타나는 차이므로, 공차라고 한다. 이 문제에서는 등차수열의 공차를 항상 0이 아닌 정수라고 제한을 둘 것이다.

등비수열(geometric sequence)은 각 항이 그 앞 항과. 일정한 비를 가지는 수열을 말한다. 그리고, 이 일정한 비를 공비라고 한다. 예를 들어, 2, 6, 18, 54, ...은 공비가 3인 등비수열이다. 이 문제에서는 등비수열의 공비를 항상 0이 아닌 정수라고 제한을 둘 것이다.

어떤 수열의 연속한 세개의 숫자가 주어졌을 때, 이 수열이 등차수열인지 등비수열인지를 구분한 후, 다음 항을 구하라  

입력


입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 수열의 연속하는 세 수 a1, a2, a3이 한 줄에 주어진다. (-10,000 < a1, a2, a3 < 10,000) a1, a2, a3은 서로 다른 수이다.

입력의 마지막 줄에는 0이 세 개 주어진다.

 

출력


각 테스트 케이스마다 아래와 같은 형태로 출력을 해야한다.

XX V

XX부분은 AP 또는 GP로 주어진 수들이 등차수열을 이룰 경우 AP를, 등비수열을 이룰 경우 GP를 출력한다. V는 주어진 수들 다음에 나올 수이다. 모든 입력은 항상 등차수열이나 등비수열이다.

 

예제 입력

4 7 10
2 6 18
0 0 0

예제 출력

AP 13
GP 54


import java.util.Scanner;

public class NextNum {
/**
* 위키피디아에 따르면 등차수열(arithmetic sequence)은 연속하는 두 항의 차이가 모두 일정한 수열을 뜻한다.
* 예를 들어, 3, 5, 7, 9, 11, 13, ...은 차이가 2로 일정한 등차수열이다.
* 이때 두 항의 차이는 이 수열의 모든 연속하는 두 항들에 대해서 공통적으로 나타나는 차이므로, 공차라고 한다.
* 이 문제에서는 등차수열의 공차를 항상 0이 아닌 정수라고 제한을 둘 것이다.
*
* 등비수열(geometric sequence)은 각 항이 그 앞 항과. 일정한 비를 가지는 수열을 말한다.
* 그리고, 이 일정한 비를 공비라고 한다. 예를 들어, 2, 6, 18, 54, ...은 공비가 3인 등비수열이다.
* 이 문제에서는 등비수열의 공비를 항상 0이 아닌 정수라고 제한을 둘 것이다.
*
* 어떤 수열의 연속한 세개의 숫자가 주어졌을 때, 이 수열이 등차수열인지 등비수열인지를 구분한 후, 다음 항을 구하라
*
* 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 수열의 연속하는 세 수 a1, a2, a3이 한 줄에 주어진다. (-10,000 < a1, a2, a3 < 10,000) a1, a2, a3은 서로 다른 수이다.
*
* 입력의 마지막 줄에는 0이 세 개 주어진다.
*
* XX V
* XX부분은 AP 또는 GP로 주어진 수들이 등차수열을 이룰 경우 AP를, 등비수열을 이룰 경우 GP를 출력한다.
* V는 주어진 수들 다음에 나올 수이다. 모든 입력은 항상 등차수열이나 등비수열이다.
*
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

int a=-1,b=-1,c =-1;

while ( true){
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
if (a==0 && b==0 && c==0) return;

int result;
if ((result = isArithmetic(a,b,c)) != -1){
System.out.println("AP " + result);
} else if ((result = isGeometric(a,b,c)) != -1){
System.out.println("GP " + result);
} else{
}

}



}

private static int isGeometric(int a, int b, int c) {
if (b%a !=0) return -1;
if (c%b !=0) return -1;
int x = b/a;

if ((c/b) == x) return c*x;
return -1;
}

private static int isArithmetic(int a, int b, int c) {
int x = b-a;
if ((c-b) == x) {
return c+x;
}
return -1;
}
}