출처 : 반크_세계유산 고인돌
문제]
입력한 수 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;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 31제] vector 사용, 문제와 같은 별 삼각형을 출력하시오. (0) | 2022.06.06 |
---|---|
C++ 30제] vector 사용, 문제와 같은 숫자 삼각형을 출력하시오. (0) | 2022.06.03 |
C++ 28제] vector 사용, 101~1000까지 중 조건에 맞는 프로그램. (0) | 2022.06.01 |
C++ 27제] vector 사용, 수열 1 + 2 + 4 + ... + 56의 합을 구하시오. (0) | 2022.06.01 |
C++ 26제] vector 사용, 1~300 사이 중 4의 배수를 출력하시오. (0) | 2022.06.01 |
댓글