작성일 :

문제 링크

4880번 - 다음수

설명

연속된 세 개의 숫자가 주어졌을 때,

그 수열이 등차수열(AP) 인지 등비수열(GP) 인지를 판별한 후, 그 다음 항을 출력하는 문제입니다.


조건은 다음과 같습니다:

  • 등차수열(AP): 인접한 항의 차이(공차)가 일정한 수열
  • 등비수열(GP): 인접한 항의 비율(공비)이 일정한 수열

모든 테스트 케이스는 반드시 등차수열 또는 등비수열 중 하나로만 구성됩니다.


접근법

  • 세 수를 입력받아 인접 항의 차이를 비교합니다.
  • 첫 번째와 두 번째 항의 차이와 두 번째와 세 번째 항의 차이가 같으면 등차수열입니다.
  • 그렇지 않으면 등비수열로 간주하고, 비율을 비교하여 다음 항을 계산합니다.
  • 입력이 0 0 0인 경우 종료합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;

class Program {
  static void Main() {
    while (true) {
      var input = Console.ReadLine().Split();
      int a = int.Parse(input[0]);
      int b = int.Parse(input[1]);
      int c = int.Parse(input[2]);

      if (a == 0 && b == 0 && c == 0) break;

      if (b - a == c - b) Console.WriteLine("AP " + (2 * c - b));
      else Console.WriteLine("GP " + (c * c / b));
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  while (true) {
    int num1, num2, num3; cin >> num1 >> num2 >> num3;
    if (!num1 && !num2 && !num3) break;
    if (num2 - num1 == num3 - num2)
      cout << "AP " << 2 * num3 - num2 << "\n";
    else if (num2 / num1 == num3 / num2)
      cout << "GP " << num3 * num3 / num2 << "\n";
  }

  return 0;
}