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
广告