C/C++每日一练8

发布时间:2026/7/28 1:37:57

C/C++每日一练8 1.字母收集题目大意给定一个字符串按顺序收集字母尝试依次拿到a→b→c→…→z。 遇到当前需要的字母就收集然后等待下一个字母 求最多能收集到第几个字母输出数量。举例 输入abacdef顺序匹配a (1)→b (2)后面 a 跳过c (3) d (4) e (5) f (6)输出 6。C AC 代码cpp运行#include iostream #include string using namespace std; int main() { string s; cin s; int now 0; // 需要收集的字母偏移0a,1b...25z for (char c : s) { if (c - a now) { now; } } cout now endl; return 0; }思路说明now代表下一个想要收集的字母now0 → 找 anow1 → 找 b…now26 代表集齐全部 26 个字母可以提前终止可选优化遍历字符串每个字符 如果当前字符正好等于目标字母now最终now就是收集到的字母总数。简易优化版集齐 26 个直接 breakcpp运行#include iostream #include string using namespace std; int main() { string s; cin s; int now 0; for (char c : s) { if (c - a now) { now; if (now 26) break; } } cout now endl; return 0; }2.添加逗号题目描述输入一个整数正整数无前置 0从右往左每 3 位添加一个逗号输出格式化后的字符串。 示例 输入1234→ 输出1,234输入1234567→ 输出1,234,567输入123→ 输出123C AC 代码cpp运行#include iostream #include string using namespace std; int main() { string s; cin s; int len s.size(); string ans; // 先处理开头不足3位的部分 int first len % 3; int pos 0; if (first ! 0) { ans s.substr(pos, first); pos first; if (pos len) ans ,; } // 每次截取3位 while (pos len) { ans s.substr(pos, 3); pos 3; if (pos len) ans ,; } cout ans endl; return 0; }思路数字当作字符串处理最简单避免大数溢出算出最左侧第一段长度len%3模为 0 时代表第一段也是 3 位依次截取每段后面加逗号最后一段不加。测试样例123→1231234→1,234123456→123,4561234567→1,234,5673.跳台阶题目描述一只青蛙一次可以跳上1 级台阶也可以跳上2 级。 求该青蛙跳上一个 n 级的台阶总共有多少种跳法。递推分析设 \(f(n)\) 为跳到第 n 阶的方案数最后一步跳 1 阶前面是 \(f(n-1)\)最后一步跳 2 阶前面是 \(f(n-2)\)\(f(n) f(n-1)f(n-2)\)边界\(f(1) 1\)\(f(2) 2\)数列1,2,3,5,8,13……C 迭代 AC 代码推荐无递归爆栈cpp运行#include iostream using namespace std; int main() { int n; cin n; if (n 1) { cout 1 endl; return 0; } if (n 2) { cout 2 endl; return 0; } long long a 1, b 2, c; for (int i 3; i n; i) { c a b; a b; b c; } cout b endl; return 0; }用long long防止大数溢出递归写法不推荐n 大超时cpp运行#include iostream using namespace std; long long jump(int n) { if (n 1) return 1; if (n 2) return 2; return jump(n-1) jump(n-2); } int main() { int n; cin n; cout jump(n) endl; return 0; }谢谢

相关新闻