news 2026/7/28 1:37:47

C/C++每日一练8

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; // 需要收集的字母偏移:0=a,1=b...25=z for (char c : s) { if (c - 'a' == now) { now++; } } cout << now << endl; return 0; }

思路说明

  1. now代表下一个想要收集的字母:
    • now=0 → 找 'a'
    • now=1 → 找 'b'
    • now=26 代表集齐全部 26 个字母,可以提前终止(可选优化)
  2. 遍历字符串每个字符: 如果当前字符正好等于目标字母,now++
  3. 最终now就是收集到的字母总数。

简易优化版(集齐 26 个直接 break)

cpp

运行

#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→ 输出123

C++ 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; }

思路

  1. 数字当作字符串处理最简单,避免大数溢出;
  2. 算出最左侧第一段长度len%3,模为 0 时代表第一段也是 3 位;
  3. 依次截取,每段后面加逗号(最后一段不加)。

测试样例

  1. 123123
  2. 12341,234
  3. 123456123,456
  4. 12345671,234,567

3.跳台阶

题目描述

一只青蛙一次可以跳上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; }
谢谢
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 1:30:16

UNet深度解析:从原理到实践的图像分割之旅

摘要本篇文章全面深入地探讨了U-Net图像分割网络的原理、架构与应用。从图像分割任务的基本概念出发&#xff0c;详细解析了U-Net的对称编码器-解码器结构、跳跃连接的核心创新机制&#xff0c;并通过数学视角揭示其本质。文章还提供了基于PyTorch的完整实战代码示例&#xff0…

作者头像 李华
网站建设 2026/7/28 1:30:15

python cheetah Python复现MIT Cheetah运动学?这波代码让机器人‘活’了

从零实现MIT 四足机器人运动学&#xff1a;实战指南四足机器人向来都是机器人领域里备受瞩目的热门研究方向, 当中MIT堪称开源四足机器人里的出类拔萃者, 它那种运动控制算法备受人们的高度关注。本文会引领您从毫无基础的起点开始, 去运用复现MIT的刚体模型以及前向运动学算法…

作者头像 李华
网站建设 2026/7/28 1:29:20

硕博生必看:如何高效准备学术会议口头报告(Oral)/海报展示(送200+学术海报模板资料包)

参加学术会议是硕博阶段拓展学术视野、对接同行专家、推广自身研究的关键途径&#xff0c;口头报告与海报展示是两大主流展示形式。二者准备逻辑、展示侧重点完全不同&#xff0c;不少同学花费大量时间打磨内容&#xff0c;却因准备思路偏差&#xff0c;现场展示效果大打折扣。…

作者头像 李华
网站建设 2026/7/28 1:28:40

协议层防篡改实战:签名验签、抗重放与密钥轮换构建安全通信

1. 项目概述&#xff1a;为什么协议层的防篡改是安全基石在分布式系统、微服务交互乃至物联网设备通信中&#xff0c;数据在网络上流动时&#xff0c;就像一封明信片在邮递系统中传递。任何中间环节&#xff0c;理论上都可能被窥探、被截获、甚至被恶意篡改。我们常常花大力气在…

作者头像 李华
网站建设 2026/7/28 1:28:10

千笔AI:深度学习驱动的学术写作智能辅助平台

1. 项目概述&#xff1a;学术写作的智能化革命千笔AI作为一款面向学术论文写作的智能辅助平台&#xff0c;正在改变传统学术研究的范式。这个平台的核心价值在于通过深度学习技术&#xff0c;为研究者提供从选题到发表的全程智能化支持。不同于市面上常见的论文查重或格式调整工…

作者头像 李华