C++ 中小於 Y 的數字的最小集合數


問題陳述

給定一個連續數字的字串和一個數字 Y,任務是找到滿足以下規則的最小集合數:

  • 集合應包含連續的數字
  • 每個數字只能使用一次。
  • 集合中的數字不得超過 Y。

示例

如果 str = “1234” 且 Y = 20,則答案為 3,如下所示建立集合:

{12} {3} 和 {4}

演算法

  • 將字串轉換為數字
  • 如果數字不大於 Y,則標記 f = 1
  • 如果數字超過 Y,則如果 f = 1 則增加計數,並將 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

更新於: 2019年11月22日

428 次檢視

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.