Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩로그

[백준/BOJ/C++] 4880번 다음수 본문

YJ/C++

[백준/BOJ/C++] 4880번 다음수

Team DAON 2021. 10. 20. 15:49

[문제]

등차수열(AP)은 인접한 두 수의 차이(공차)가 일정한 수열이다. 예를 들어, 3, 5, 7, 9, 11, 13, ...은 차이가 2로 일정한 등차수열이다. 이 문제에서 등차수열의 공차는 항상 0이 아닌 정수이다.

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

어떤 수열의 연속한 세개의 숫자가 주어졌을 때, 이 수열이 등차수열인지 등비수열인지를 알아낸 뒤, 다음 항을 구하는 프로그램을 작성하시오.

 

[입력]

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

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

 

[출력]

각 테스트 케이스에 대해서, 등차수열이면 AP를, 등비수열이면 GP를 출력한 뒤, 다음 항을 출력한다. 모든 입력은 항상 등차수열이나 등비수열이다.

 

[Source Code]

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

int main() {
	vector<string> kinds;
	vector<int> next;

	while(true){
		int a, b, c;
		cin >> a >> b >> c;
		if(a == 0 && b == 0 && c == 0)
			break;
		else{
			if(b - a == c - b){
				kinds.push_back("AP");
				next.push_back(c + (c - b));
			}
			else if(b / a == c / b){
				kinds.push_back("GP");
				next.push_back(c * (c / b));
			}
		}
	}

	for(int i = 0; i  < kinds.size(); i++){
		cout << kinds[i] << " " << next[i] << "\n";
	}
}

[결과 화면]