备战秋招c++ 【持续更新】

2024-05-28 10:20
文章标签 c++ 更新 秋招 持续 备战

本文主要是介绍备战秋招c++ 【持续更新】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

T1   牛牛的快递


原题链接:牛牛的快递_牛客题霸_牛客网 (nowcoder.com)

题目类型:模拟

审题&确定思路:

1、超过1kg和不足1kg有两种不同收费方案 ---- 起步价问题

2、超出部分不足1kg的按1kg计算 ----- 向上取整

3、向上取整的实现思路 

a:使用库函数ceil()   //要包含头文件 #inlcude<cmath>

b:强转 + 判断

if(ch - (int)ch > 0) //  eg: (int)1.5 = 1 
//说明需要向上取整

参考代码

#include <iostream>
#include <cmath>
using namespace std;int main() {float a;char b;cin >>a>>b;if(a >1){int ret = ceil(a)-1;cout<<(b == 'y' ? 25+ret : ret+20)<<endl;}else {cout <<(b == 'y' ? 25: 20)<<endl;}return 0;
}

T2最小花费爬楼梯

原题链接:最小花费爬楼梯_牛客题霸_牛客网 (nowcoder.com) 

题目类型:dp

审题&确定思路:

1、确定状态表示:dp[i]表示 以i位置为结尾,从0或1下标开始到这个位置的最小花费

2、确定状态转移方程:以i位置为结尾进行思考。因为可以选择跳一层或者两层,说明当站在i这层位置的时候,可能是从前一层或者前两层跳上来的。要使得当前i位置的花费最小,则要对比从前一层跳过来的最低花费和从前两层跳过来的最低花费 谁更小 再加上往上跳对应要支付的花费,就得到当前层最低花费

其中最低花费对应状态表示dp[i]

将上述关系转化为代码

dp[i] = min(dp[i-1] +cost[i-1] ,dp[i-2]+cost[i-2]);

3、确定填表顺序

因为需要用到前两层的dp信息,所以从左往右填表

4、处理边界情况

因为下标从0开始,可以从0也可以从1开始跳,而刚站上这层楼梯时是不需要花费的,往上跳才需要支付这层的花费。所以dp[0]和dp[1]都为0

接着填表从i = 2开始,就不会发生越界问题。

参考代码:

#include <iostream>
#include<vector>
#include<cmath>
using namespace std;int main() {int n;cin>>n;vector<int>cost(n);for(int i = 0;i<n;i++){cin>>cost[i];}vector<int>dp(n+1);dp[0] = 0;dp[1] = 0;for(int i =2;i<=n;i++){dp[i] = min(dp[i-1] +cost[i-1] ,dp[i-2]+cost[i-2]);}cout<<dp[n];return 0;}

T3数组中两个字符串的最小距离

原题链接:数组中两个字符串的最小距离__牛客网 (nowcoder.com)

题目类型:贪心、字符串

审题&确定思路:

1、题目说的strs其实是个字符串类型的数组,里面存放的都是字符串

2、暴力解法,先固定一个字符串str1,然后再搜索str2,计算两个字符串间的距离,并与记录的最短距离进行比较

3、优化思路:贪心 ---- 使用一个或多个变量来表示前驱的信息,即预处理信息。(最终达到优化一层循环的效果)

4、优化实现方法:设置两个int变量prev1 和 prev2 分别记录str1和str2最后一次出现的下标。

5、优化效果:可以不用创建字符串数组来记录strs中的字符串,而是直接用一个字符串模拟当前遍历到的strs字符串数组中的字符串。因为prev1 和 prev2 这两个变量已经记录了信息,strs遍历完的元素不会再次遍历,所以可以省去构建数组的这一步。

参考代码:

#include <iostream>
#include<vector>
#include<cmath>
using namespace std;int main() {//处理输入信息string str1 ,str2;int n;cin >>n>>str1>>str2;//使用一个字符串变量来表示当前遍历到的字符串string s;//设置变量记录前驱信息,优化一层循环//初始化为-1是为了区别str1/str2是否在strs中出现int prev1 = -1,prev2 = -1;//ret 记录两字符串间的最短距离,为不影响最短距离的比较,所以设置个较大值//0x3f3f3f3f是常用数据,可近似看做无限大值int ret = 0x3f3f3f;for(int i = 0;i<n;i++){cin >>s;if(s == str1){prev1 = i;if(prev2 != -1)ret = fmin(ret,abs(prev2 - prev1));}else if(s == str2) //要写出 s == str2 不能直接写else if,因为除了str1和str2,strs中的字符串(即s)还有其他样式的{prev2 = i;if(prev1 != -1)ret = fmin(ret,abs(prev2 - prev1));}}//判断是否str1和str2都在strs中出现了if(ret != 0x3f3f3f){cout << ret<<endl;}else {cout<<-1<<endl;}return 0;}

这篇关于备战秋招c++ 【持续更新】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010297

相关文章

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数