본문 바로가기
프로그램/C++ 1000제

C++ 29제] vector 사용, 입력한 수 N번째까지 출력하는 수열 프로그램.

by 건티 2022. 6. 2.
728x90

출처 : 반크_세계유산 고인돌

 

문제]

입력한 수 N번째까지 출력하는 수열 1, 2, 4, 7, 11, 16, 22, 29, 37, ..., n(N번째 수열 수)을 출력하는 프로그램을 작성하시오.

조건)

1. 입력 수 N은 5<N<=300의 범위를 갖는다.

2. 범위를 벗어난 수가 입력되면 "5~300사이의 수를 입력하세요."와

     "다시 입력하세요..." 출력하고 다시 입력한다.

3. 수열을 출력할 때는 항상 일정한 간격을 유지할 수 있도록 한다.

    (예 : N을 14 입력하면 간격은 3자리를, N을 300 입력하면 간격은 6자리를 유지하도록 한다.)

4. 한줄에 10개씩 출력하도록 하시오.

 

입력/출력 예)

출력할 수열의 개수를 입력하시오 : 3

5~300사이의 수를 입력하세요.

다시 입력하세요...

출력할 수열의 개수를 입력하시오 : 14

   1   2   4   7 11 16 22 29 37 46

 56 67 79 92

 

참고풀이]

#include <iostream>
#include <vector>
#include <numeric> //accumulate()
#include <iomanip> //setw()
using namespace std;

int Jsu(int k)
{
   int j;
   int x;

   x=1;
   j=1;
   while(1)
   {
      x++;
      j*=10;
      if(j>k) break;
   }

   return x;
}


int main()
{
   vector<int> v;
   int N;//N번째 수열 위치 변수 
   int n;//수열 변수  
   int i;
   int cnt;//수열의 개수를 세는 변수 
   int jari;//출력할 때 일정한 공간을 확보할 변수 

   //N번째 수열의 위치를 입력한다.
   while(1) 
   {
      cout << "출력할 수열의 개수를 입력하시오 : ";
      cin >> N;
      if (N>5 && N<=300) break;
      cout << "5~300사이의 수를 입력하세요.\n";
      cout << "다시 입력하세요...\n";
   }

   //vector에 수열 1, 2, 4, 7, 11, 16, 22, 29, ..., n까지 N번째 까지 저장한다.
   n=1;//수열의 초기값 설정 
   i=0;//증가변수 
   cnt=0;
   while(cnt<N)
   {
      n+=i++;
      v.push_back(n);
      cnt++;
   }

   //결과출력
   jari=Jsu(v[v.size()-1]);
   for(i=0;i<v.size();i++)
      if((i+1)%10) cout << setw(jari) << v[i];
      else cout << setw(jari) << v[i] << endl;

   return 0;
}

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글