【C++】 —— 笔试刷题day_19

【C++】 —— 笔试刷题day_19

一、小易的升级之路

题目解析

在这里插入图片描述
小易现在要打游戏,现在游戏角色的初始能力值为a,我们会遇到n个怪,这些怪物的防御值为b1、b2、b3...,如果我们的能力值要高于或者等于怪物的防御值,那我们的能力值就会加bi;如果不大于怪物的防御值,我们的能力值就加当前能力值和bi的最大公约数。

我们要求出来小易的最终能力值。

算法思路

这道题,也是一道很简单的模拟题目了,直接模拟整个过程即可。

当前能力值为c,如果c>=bi,那能力值就加上bi

如果c<bi,那能力值就加上cbi的最大公约数。

代码实现

这里要注意的是:题目是多组输入,我们这里要用while(cin>>n>>c)来进行多组输入

#include<iostream>usingnamespace std;intmin_y(int x,int y){int tmp = x % y;while(tmp){ x = y; y = tmp; tmp = x % y;}return y;}intmain(){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 +=min_y(x, c);} cout << c << endl;}return0;}

二、礼物的最大价值

题目解析

在这里插入图片描述
题目给了一个m*n的棋盘,每一个格子里面都放着一个礼物,每一个礼物都有一定价值;现在我们从左上角开始拿礼物,我们只能向右或者向下移动一格,直到棋盘的右下角;我们要计算最多可以拿到多少价值的礼物。

给定一个二维数组,每一个位置的值就表示该位置礼物的价值,我们从(1,1)位置开始,向右或者向下走,直到(m,n)位置,求最多可以拿到多少价值的礼物。

算法思路

这道题呢,算是一道路径问题,解法呢就是动态规划

题目中说,我们可以向右和向下走,也就是从[i,j]位置移动到[i][j+1]位置和[i+1][j]位置(我们反过来理解就是,要走到[i,j]位置,只能从[i][j-1][i-1][j]两个位置走过去,那走到[i,j]位置能拿到礼物的最大价值就等于,走到[i,j-1][i-1][j]位置能拿到礼物的最大价值的最大值再加上[i,j]位置礼物的价值。

动态规划思路:

状态表示:dp[i][j]表示走到[i,j]位置能拿到礼物的最大价值。

状态转移方程:dp[i][j] = max(dp[i][j-1] , dp[i-1][j]) + arr[i][j]
在这里插入图片描述

代码实现

这里要注意

下标对应,题目给的数组grid下标是从(0,0)开始的,而我们的dp表为了方便初始化,下标是从(1,1)开始的。

所以对于(i,j)位置,该位置礼物的价值是存在(i-1,j-1)中的。
classSolution{public:int dp[201][201]={0};intmaxValue(vector<vector<int>>& grid){// write code hereint 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个字符串,让第1个字符到第n个字符,每一个字符取出一个字符,这样组成一个新的字符串,让我们判断这个新的字符串是否可能是一个回文字符串;如果也可能输出Yes,否则就输出No

题目有t组数据,对于每一组数据,我们都要进行判断并输出结果。

算法思路

这道题初看可能有一点思路,但不多;

对于n个字符串,每一个字符串取一个字符组成的新字符串,能否构成回文字符串;(对于回文字符串,我们知道,第1哥和第n个、第2个和第n-1个…这些字符都是相同的

我们就非常好判断了,定义lr分别从两边开始遍历字符数组,我们只需要判断l位置字符串和r位置字符串是否存在相同的字符就OK了。

思路:双指针 + 判断两个字符串是否存在相同的字符。

那么现在问题就变成了:如何判断两个字符串存在相同的字符?

那判断两个字符串中是否存在相同的字符,方法就很简单了:使用hash表计数。

首先遍历第一个字符串,将所有出现的字符放到hash表中,让遍历第二个字符串判断是否存在相同的字符即可。
在这里插入图片描述

代码实现

#include<iostream>#include<vector>#include<unordered_set>usingnamespace std;boolfunc(string& str1, string& str2){ unordered_set<char> hash;for(int i =0;i<str1.size();i++){ hash.insert(str1[i]);}bool b =false;for(int i =0;i<str2.size();i++){if(hash.count(str2[i])){ b =true;break;}}return b;}intmain(){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<k){if(func(arr[l],arr[r])==false){ ret =false;break;} l++; r--;}if(ret) cout<<"Yes"<<endl;else cout<<"No"<<endl;}return0;}

Read more

【Linux系统】理解管道通信,匿名管道实现进程池+命名管道实现服务端客户端通信模型(附源码)

【Linux系统】理解管道通信,匿名管道实现进程池+命名管道实现服务端客户端通信模型(附源码)

文章目录 * 一、进程间通信是什么 * 二、管道 * 1. 什么是管道 * 2. 匿名管道 * 3. 命名管道 * 三、实例:匿名管道实现进程池 * 四、实例:命名管道实现服务端客户端通信模型 一、进程间通信是什么 进程间通信(IPC),顾名思义,进程之间需要进行信息交换。 如:数据传输、资源共享、通知事件、进程控制。 进程间通信的方式有:管道、System V IPC、POSIX IPC。 由于进程具有独立性,进程间通信的前提就是,不同的进程能看到同一份资源。 二、管道 1. 什么是管道 管道是类Unix系统中最古老的进程间通信的方式。我们把从一个进程连接到另一个进程的数据流称为一个“管道”。 管道是单向通信的,称为单工通信。 管道分为匿名管道和命名管道。 2. 匿名管道

By Ne0inhk
Java毕设项目推荐-基于springboot+vue的线上的整车生产线管理系统生产线的资源调度、任务分配、进度跟踪【附源码+文档,调试定制服务】

Java毕设项目推荐-基于springboot+vue的线上的整车生产线管理系统生产线的资源调度、任务分配、进度跟踪【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。 主要内容:免费开题报告、任务书、全bao定制+中期检查PPT、代码编写、🚢文编写和辅导、🚢文降重、长期答辩答疑辅导、一对一专业代码讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 特色服务内容:答辩必过班 (全程一对一技术交流,帮助大家顺利完成答辩,小白必选) 全网粉丝50W+,累计帮助2000+完成优秀毕设 🍅文末获取源码🍅 感兴趣的可以先收藏起来,还有大家在毕设选题,

By Ne0inhk
飞算JavaAI:智能ai工具箱,普通程序员也能高效交付

飞算JavaAI:智能ai工具箱,普通程序员也能高效交付

做程序员这些年,最烦的就是接到需求模糊、涉及模块多的项目——就像这次要开发的本地生活食材配送平台,需求只写了“支持商家入驻、用户下单、食材溯源、配送调度、售后维权”,具体怎么拆分功能、设计架构,完全没头绪。换以前,光和产品经理对接需求、画架构图就要3天,加上编码、调试,没两周根本交不出活。但用了飞算JavaAI专业版后,整个开发周期压缩到一周,还提前2天完成测试上线,核心靠的就是它的智能引导系统和实用AI工具,让复杂项目开发变得有条理、高效率。 智能引导五步法:从模糊需求到可落地代码,一步不卡壳 面对食材配送平台的多元需求,我一开始只知道核心方向,具体的功能模块、接口设计、数据存储完全是一团乱麻。飞算JavaAI的智能引导系统,就像一个贴身助手,一步步帮我把需求拆解、落地,全程没遇到卡壳的地方。 1. 第一步理解需求仅用 15 秒就拆解出 12 个关键功能点,涵盖商家、用户、商品、订单、配送等基础模块,还补充了食材溯源、

By Ne0inhk
(第三篇)Spring AI 实战进阶:从0开发IDEA插件版AI代码助手(Java全栈+上下文感知)

(第三篇)Spring AI 实战进阶:从0开发IDEA插件版AI代码助手(Java全栈+上下文感知)

前言 作为 Java 开发者,我们每天都在重复编写 CRUD 代码、调试语法错误、优化性能问题 —— 这些机械性工作占用了大量时间,而市面上的通用 AI 代码助手(如 Copilot)往往无法精准感知项目上下文(比如项目的包结构、依赖版本、数据库表结构),生成的代码需要大量修改才能落地。 笔者近期基于 Spring AI+IDEA 插件开发了一款定制化 AI 代码助手:后端基于 Spring AI 整合 JavaParser、Maven API 实现代码解析与生成,前端通过 IDEA 插件提供对话窗口和一键插入代码功能,支持需求描述→完整代码生成代码优化、上下文感知、补全三大核心能力。本文将从实战角度,完整拆解这款 AI 代码助手的开发全流程,所有代码均为生产环境可直接复用的实战代码,同时结合可视化图表清晰呈现核心逻辑,希望能帮你打造专属的 AI

By Ne0inhk