给定一串连续的数字和一个数字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