[백준 9310] Arithmetic and Geometric Sums (C#, C++) - soo:bak
작성일 :
문제 링크
9310번 - Arithmetic and Geometric Sums
설명
주어진 세 수가 산술 혹은 기하 급수의 처음 세 항일 때,
해당 세 항을 통하여 주어진 급수가 산술 급수인지 기하 급수인지 판별하고,
해당 급수의 합을 n
번째 항 까지 계산하여 출력하는 문제입니다.
산술 급수와 기하 급수를 구분하기 위해, 두 번째 항과 첫 번째 항의 차이, 그리고 세 번째 항과 두 번째 항의 차이를 비교한 후,
두 차이가 동일하다면 주어진 급수는 산술 급수임을, 그렇지 않다면 주어진 급수는 기하 급수임을 이용하여 문제를 풀이합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace Solution {
class Program {
static void Main(string[] args) {
while (true) {
var n = int.Parse(Console.ReadLine()!);
if (n == 0) break ;
var input = Console.ReadLine()!.Split(' ');
var a = long.Parse(input[0]);
var b = long.Parse(input[1]);
var c = long.Parse(input[2]);
long ans = 0;
if (b - a == c - b) ans = n * (2 * a + (n - 1) * (b - a)) / 2;
else ans = (long)(a * (Math.Pow((double) b / a, n) - 1) / ((double) b / a - 1));
Console.WriteLine(ans);
}
}
}
}
[ C++ ]
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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
while (true) {
int n; cin >> n;
if (n == 0) break ;
ll a, b, c; cin >> a >> b >> c;
ll ans = 0;
if (b - a == c - b) ans = n * (2 * a + (n - 1) * (b - a)) / 2;
else ans = a * (pow(b / a, n) - 1) / (b / a - 1);
cout << ans << "\n";
}
return 0;
}