跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++算法

C++ 笔试刷题:模拟、动态规划与回文判断

包含三道 C++ 算法面试题。第一题通过模拟过程计算角色最终能力值,涉及最大公约数运算;第二题使用动态规划求解网格路径上的最大礼物价值;第三题利用双指针与哈希表判断能否从多个字符串中选取字符组成回文串。代码均经过格式化优化,适合笔试复习。

疯疯癫癫发布于 2026/3/22更新于 2026/5/517 浏览
C++ 笔试刷题:模拟、动态规划与回文判断

一、小易的升级之路

题目描述

游戏角色初始能力值为 a,遇到 n 个怪物,防御值为 b1, b2...。若能力值 >= 怪物防御值,能力值加 bi;否则能力值加当前能力值和 bi 的最大公约数。求最终能力值。

算法思路

直接模拟整个过程。遍历每个怪物,根据条件更新能力值。

代码实现

注意多组输入。

#include <iostream>
#include <algorithm>
using namespace std;

int gcd(int x, int y) {
    int tmp = x % y;
    while (tmp) {
        x = y;
        y = tmp;
        tmp = x % y;
    }
    return y;
}

int main() {
    int c, n;
    while (cin >> n >> c) {
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            if (c >= x) c += x;
            else c += gcd(x, c);
        }
        cout << c << endl;
    }
    return 0;
}

二、礼物的最大价值

题目描述

m*n 棋盘,格子有礼物价值。从左上角 (0,0) 出发,只能向右或向下移动至右下角 (m-1,n-1),求最大礼物价值。

算法思路

动态规划。dp[i][j] 表示走到 [i,j] 位置能拿到礼物的最大价值。状态转移方程:dp[i][j] = max(dp[i][j-1], dp[i-1][j]) + arr[i][j]。

代码实现

注意数组下标对应关系。

#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    int dp[201][201] = {0};
    int maxValue(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) + grid[i - 1][j - 1];
            }
        }
        return dp[m][n];
    }
};

三、对称之美

题目描述

给出 n 个字符串,从每个字符串取一个字符组成新字符串,判断是否可能构成回文字符串。

算法思路

双指针 + 哈希表。定义 l 和 r 分别从两边遍历字符串数组,判断 arr[l] 和 arr[r] 是否存在相同字符。若存在,则继续向中间移动;否则无法构成回文。

代码实现

#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;

bool func(string& str1, string& str2) {
    unordered_set<char> hash;
    for (char c : str1) hash.insert(c);
    for (char c : str2) {
        if (hash.count(c)) return true;
    }
    return false;
}

int main() {
    int n;
    cin >> n;
    while (n--) {
        int k;
        cin >> k;
        vector<string> arr(k);
        for (int i = 0; i < k; i++) cin >> arr[i];
        int l = 0, r = k - 1;
        bool ret = true;
        while (l <= r) {
            if (!func(arr[l], arr[r])) {
                ret = false;
                break;
            }
            l++;
            r--;
        }
        if (ret) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    return 0;
}

目录

  1. 一、小易的升级之路
  2. 题目描述
  3. 算法思路
  4. 代码实现
  5. 二、礼物的最大价值
  6. 题目描述
  7. 算法思路
  8. 代码实现
  9. 三、对称之美
  10. 题目描述
  11. 算法思路
  12. 代码实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java 哈希表原理与实现
  • 使用 Conda 创建 Python 3.10 虚拟环境
  • 星辰 RPA 与 Agent:构建小红书自动发文机器人
  • OD 机试真题:机器人活动区域
  • MATLAB 实现基于天牛须搜索算法(BAS)的无人机三维路径规划
  • 汽车雷达多径场景下的幽灵目标检测:论文精读
  • AionUi:首个开源运行时生成式 UI 框架,意图驱动界面渲染
  • 二分查找经典例题实战解析
  • 纯 CSS 贪吃蛇游戏:无 JavaScript 实现完整逻辑
  • 计算机专业大学生必参加的六大编程竞赛指南
  • 前缀和算法应用详解
  • Linux 匿名管道通信:原理与代码实现
  • 2026 年字节跳动豆包大模型 2.0 全场景 AI 智能体平台解读
  • AIGC 核心技术解析:GPT、BERT 与 Transformer 模型原理
  • Z-Image-Turbo 开源 AI 绘画模型轻量化部署指南
  • Neo4j 图数据库核心概念与在线控制台使用指南
  • AI 工具泛滥时代,为何个人能力变现变难?
  • DeerFlow 2.0:字节开源的超级 Agent 框架
  • 前端自动化部署指南:CI/CD、Docker 与缓存策略
  • PaperRed:AI 辅助论文写作与查重降重工具解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online