세 개의 정수 A, B, N이 주어졌을 때, A와 B 사이에 존재하는 N개의 산술 평균(등차중항)을 구하는 문제입니다.
예를 들어 A = 20, B = 32, N = 5라면, 출력 결과는 22, 24, 26, 28, 30이 됩니다.
문제 접근 방법
이 작업은 본질적으로 간단합니다. A를 첫째 항으로, B를 마지막 항으로 하는 등차수열의 중간에 N개의 항을 삽입하면 됩니다. 삽입되는 산술 평균들을 A₁, A₂, …, Aₙ이라고 하면 전체 수열은 다음과 같은 형태가 됩니다.
A, A₁, A₂, …, Aₙ, B
여기서 B는 이 수열의 (N + 2)번째 항입니다. 따라서 등차수열의 성질을 이용하면 다음과 같이 공차 d를 유도할 수 있습니다.
$$B=A+(N+2-1)\times d$$
$$B-A=(N+2-1)\times d$$
$$d=\frac{B-A}{(N+2-1)}$$
즉, 공차는 (B − A) ÷ (N + 1)이 되며, 첫째 항 A에서부터 공차를 반복해서 더해가면 원하는 N개의 산술 평균을 차례대로 얻을 수 있습니다.
C++ 구현 예제
#include<iostream>
using namespace std;
void showMeans(int A, int B, int N) {
float d = (float)(B - A) / (N + 1);
for (int i = 1; i <= N; i++)
cout << (A + i * d) <<" ";
}
int main() {
int A = 20, B = 40, N = 5;
showMeans(A, B, N);
}
실행 결과
23.3333 26.6667 30 33.3333 36.6667
위 코드에서 공차 d를 계산할 때 정수 나눗셈의 오차를 방지하기 위해 float 형변환을 사용했다는 점에 유의하세요. 덕분에 A와 B가 공차로 나누어 떨어지지 않는 경우에도 소수점 결과를 정확하게 출력할 수 있습니다.