Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 Y보다 작은 숫자를 가진 최소 집합 수

<시간/>

문제 설명

연속된 숫자의 문자열과 숫자 Y가 주어지면 모든 집합이 아래 규칙을 따르도록 최소 집합의 수를 찾는 것입니다. -

  • 세트에는 연속된 숫자가 포함되어야 합니다.
  • 숫자는 두 번 이상 사용할 수 없습니다.
  • 집합의 숫자는 Y보다 커서는 안 됩니다.

str ="1234"이고 Y =20이면 아래 집합이 생성되므로 답은 3입니다. -

{12} {3} 및 {4}

알고리즘

  • 문자열을 숫자로 변환
  • 숫자가 Y보다 크지 않으면 f =1로 표시
  • 숫자가 Y를 초과하면 f =1이면 count를 늘리고 f를 0으로 다시 초기화하고 num을 s[i]-'0'으로 초기화하거나 num을 0으로 초기화합니다.
  • 문자열을 완전히 반복한 후 f가 1이면 개수를 늘립니다.

#include <iostream>
#include <string>
using namespace std;
int getMinSets(string str, int y) {
   int cnt = 0;
   int num = 0;
   int l = str.length();
   int f = 0;
   for (int i = 0; i < l; ++i) {
      num = num * 10 + str[i] - 48;
      if (num <= y) {
         f = 1;
         continue;
      }
      if (f) {
         ++cnt;
      }
      num = str[i] - '0';
      f = 0;
      if (num <= y) {
         f = 1;
      } else {
         num = 0;
      }
   }
   if (f) {
      ++cnt;
   }
   return cnt;
}
int main() {
   string str = "1234";
   int y = 20;
   cout << "Minimum sets = " << getMinSets(str, y) << endl;
   return 0;
}

출력

위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -

Minimum sets = 3