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

C++ 70제] vector 사용, 주어진 숫자를 분해하여 원소 찾는 프로그램.

by 건티 2022. 8. 9.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

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;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

반응형

댓글