출처 : 반크_세계유산 창덕궁
문제]
8개의 광주리에 사과가 1, 2, 4, 8, 16, 32, 64, 128개씩 각각 담겨있습니다. 이 광주리의 사과들을 합하여 입력하는 수가 되는 경우의 수를 나타내는 프로그램을 함수를 사용하여 작성하시오.
▶ 입력수의 범위는 1<=N<256으로 한다.
▶ 입력수의 범위가 벗어나면 에러 메세지를 띄우고 다시 입력한다.
출력 예)
원하는 수를 입력하시오 : 526
1~255 사이의 수를 입력하세요.
다시 입력하세요.
원하는 수를 입력하시오 : 87
1 + 2 + 4 + 16 + 64 = 87
참고풀이]
#include <iostream>
#include <vector>
#include <iomanip> //setw()
using namespace std;
void Hab(int n);
int main()
{
int N;//입력 변수 1<=N<255
while(true)
{
cout << "원하는 수를 입력하시오 : ";
cin >> N;
if(N>=1 && N<255) break;
cout << "1~255 사이의 수를 입력하세요.\n";
cout << "다시 입력하세요...\n\n";
}
Hab(N);
return 0;
}
void Hab(int n)
{
vector<int> v;//원소값을 넣을 vector 변수
//n값을 분해한 값들을 저장할 vector를 선언하고 0으로 셋팅한다.
vector<int> nin;
int i,j;//반복 또는 인덱스 변수
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(8);
v.push_back(16);
v.push_back(32);
v.push_back(64);
v.push_back(128);
//n의 원소수들을 구한다.
for(i=v.size()-1;i>=0;i--)
if(v[i]<=n)
{
nin.push_back(v[i]);
n-=v[i];
}
//결과출력
for(i=nin.size()-1;i>=0;i--)
{
n+=nin[i];
cout << setw(2) << nin[i];
if(i>0) cout << " + ";
else cout << " = ";
}
cout << n << endl;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 겨울
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 72제] vector 사용, 영문 문장의 첫글자를 대문자로 변환하기. (0) | 2022.08.24 |
---|---|
C++ 71제] vector사용, 영문 문자열을 문장 단위로 출력하기. (0) | 2022.08.23 |
C++ 69제] vector 사용, 원하는 달팽이 수를 만들기 (0) | 2022.08.09 |
C++ 68제] vector 사용, 1~5까지 사칙연산 사용하여 10만들기. (0) | 2022.07.29 |
C++ 67제] vector 사용, 문제와 같은 달팽이형 사각형을 출력하시오. (0) | 2022.07.26 |
댓글