Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 숫자 N이 오각수인지 확인하는 프로그램

숫자 N이 주어졌을 때, 이 숫자가 오각수(pentagonal number)인지 판별하는 것이 목표입니다. 오각수는 점들을 배열하여 오각형 형태를 만들 수 있는 수를 말하며, 각 단계마다 점들이 오각형 테두리를 따라 배치됩니다. 대표적인 오각수로는 1, 5, 12, 22, 35, 51 등이 있습니다.

오각수 판별 공식

다음 공식을 활용하면 어떤 숫자가 오각수인지 손쉽게 확인할 수 있습니다.

$$p(n)=\frac{3n^2-n}{2}$$

여기서 n은 해당 오각형을 구성하는 점의 개수를 의미합니다. 역으로, 주어진 수 N에 대해 이 식을 만족하는 자연수 n이 존재하는지 검사하면 됩니다.

예시

입력: n = 22
출력: 22은(는) 오각수입니다.
입력: n = 23
출력: 23은(는) 오각수가 아닙니다.

알고리즘

Start
Step 1 -> N이 오각수인지 확인하는 함수 선언
    bool check(int n)
      변수 선언: int i = 1, a
      do
         a = (3*i*i - i)/2 계산
         i += 1
      while (a < n);
      return (a == n);
Step 2 -> main() 함수에서
    int n = 22 선언
    if (check(n))
       "오각수입니다" 출력
    else
       "오각수가 아닙니다" 출력
Stop

C++ 코드 구현

#include <iostream>
using namespace std;
// N이 오각수인지 확인하는 함수
bool check(int n){
   int i = 1, a;
   do{
      a = (3*i*i - i)/2;
      i += 1;
   }
   while ( a < n );
   return (a == n);
}
int main(){
   int n = 22;
   if (check(n))
      cout << n << " is pentagonal " << endl;
   else
      cout << n << " is not pentagonal" << endl;
   return 0;
}

실행 결과

22 is pentagonal

동작 원리 설명

check 함수는 i를 1부터 시작해 하나씩 증가시키며 각 i에 대한 오각수 값을 계산합니다. 계산된 값 a가 입력값 n보다 커질 때까지 do-while 반복문을 수행한 뒤, 마지막으로 계산된 a가 n과 정확히 일치하는지 비교합니다. 두 값이 일치하면 n은 오각수이고, 그렇지 않으면 오각수가 아닙니다. 위 예제에서는 n = 22일 때 a가 정확히 22가 되므로 "22 is pentagonal"이 출력됩니다.