C++每日一练:饿龙咆哮-逃离城堡(避坑指南)非负整数求和

news2024/9/21 1:49:09

文章目录

  • 前言
  • 一、题目
  • 二、解题代码及思路
    • 1、思路
    • 2、代码
  • 三、非负整数求和
  • 总结


前言

饿龙这一题要说难度嘛,还真是挺简单的,但要满分也是有坑的!本文就记录了笔者解题过程,希望能对读者使用C++编程有所启发。至于非负整数求和代码是挺长的,难度也不算高吧。

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目描述:
饿龙咆哮,饿偶!饿偶!饿偶偶! 小艺酱误入龙族结界,被恶龙带回城堡,准备当作新娘。 可是小艺酱怎么可能嫁给一个吃不饱穿不好的饿龙呢? 小艺酱决定逃离城堡,逃离龙族结界,总路程为c。 小艺酱的速度是vp,饿龙速度为vd。饿龙会在t小时后发现小艺酱出逃。 小艺酱担心自己跑不出去,准备了好多珍宝。 每当饿龙追上自己的时候小艺酱就会丢下一个珍宝,饿龙捡到珍宝会返回自己的城堡进行研究,研究f小时后,再出城堡追赶小艺。 小艺想知道自己至少需要丢多少珍宝才能让自己安全逃出结界。

输入描述:输入整数vp,vd,t,f,c。(1<=vp,cd<=100,1<=t,f<=10,1<=c<=1000)。

示例 输入:1,2,1,1,10 。输出:2

二、解题代码及思路

小学老师告诉我们,快车追慢车是这么算的:慢车已跑路程 除以 快车和慢车的速度差。就是快车追上慢车要用的时间了。根据这点我们可以模拟恶龙追小艺的过程。

1、思路

小艺有个初始逃跑时间 t,所以已跑路就是vp * t,然后恶龙来追,根据公式得出恶龙追到小艺所需时间 t_catch。在恶龙追赶的过程中,小艺也跑了同样的时间。所以小艺的已跑路程要加上 vp 乘 t_catch。这时判断小艺是否逃跑成功,如没成功,小艺就丢法宝。丢了法宝后小艺获又得了恶龙回家的 t_catch 时间,和恶龙研究法宝的 f 时间。据此更新小艺逃跑的路程,如此循环即可,中间加上判断条件,记录丢法宝的次数就OK。

2、代码

#include <iostream>
#include <string>

int solution(int vp, int vd, int t, int f, int c){
    int result = 0;
    // TODO:
    double p_dist =  vp * t;
    double t_catch;

    while(p_dist < c && vp < vd){
        t_catch = p_dist/(vd-vp);
        p_dist += vp * t_catch;
        if (p_dist < c){
            result++;
            p_dist += vp * (t_catch + f);
        }
    }
    return result;
}

虽然思路简单,但以上也是笔者多次调试后才得出的正确方法。这中间最大的坑是被示例数据所误导的,因为示例中的数据都是正好整除的,而且示例给的全是 int 。所以笔者一开始对 p_dist、t_catch 这两个变量定义了 int 型。然后就只能过80%的用例!想了好久…

第二个坑是 vp 和 vd 的值,并不一定是 vd 大于 vp 的。然后笔者悲剧的陷入了除数为0的坑。因为一开始给 result 赋值为0了,笔者以为不满足条件的情况就不会运行,不用另做判断,结果让笔者试出了result为0的有40%,也就是你直接在result后面加上=0,就有40分了…

三、非负整数求和

既然遇到了数据类型的坑,为避免以后再犯同样的错误,有必要复习一下常用的整数类型:(以下各种数据类型的字节占用数视不同平台有所不同,仅以目前大多数情况为例)

1、最常用的int:是一种整数类型,表示有符号整数。它通常占用4个字节,可以存储介于-2147483648到2147483647之间的值。虽然加上unsigned 可以让正整数范围再大一些,可不能取负值。不如直接上更大的数据类型。注意:long int 往往和 int 一样的范围!

2、long long:这个取值范围比 int 大了很多,long long这种整数类型,表示有符号整数。它通常占用8个字节,可以存储介于-9223372036854775808到9223372036854775807之间的值。

3、有没有更大取值范围的类型?目前C++没有像Java的BigInteger这种类型,也就是说内置的整数类型最大的就是 long long int 了。所以C++的题目中常见到超大整数相加相乘的傻题!得按字符来计算,今天的题目 “非负整数求和” 就是了。按字符从右往左一位位计算,记得考虑进位就好了(代码见下)。乘法就相当麻烦了,要分段计算后相加,要考虑的就多了。这里不说科学计数法,那个精度降低了。

4、有小数点的double:是一种浮点数类型,可以存储小数。它通常占用8个字节,可以存储介于±5.0×10-324, 到±1.7×10308之间的值。一般想要除出小数就选它,另一种 float 也可以,但精度较差。且在当前的计算机系统下,float并不会比double快多少,有时甚至更慢。

5、short int 等其他整数类型也已很少使用。 C++11引入的固定宽度整数类型,例如 int8_t和 uint64_t,int8_t 是有符号整数类型,可以存储介于-128到127之间的值。uint64_t 是无符号整数类型,可以存储介于0到18446744073709551615之间的值。这些数据类型通常用于需要精确控制内存使用情况的应用程序,例如嵌入式系统中。

非负整数求程,以下为示例:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

using namespace std;
string solution(vector<string>& vec){
    string result;     //这里都要改成字符串
    // TODO:
    string sn = vec[0]; 
    string sm = vec[1]; 
    if (sn.length() > sm.length()){
        string tmp = sn;
        sn = sm, sm = tmp;
    }
    int len_sn = sn.length();
    int len_sm = sm.length();
    int forward = 0;       //进位
    string sum;           //结果
    string more = sm.substr(0, len_sm-len_sn); 
    while (len_sn > 0){
        int num_m = sm[len_sm-1] - '0';
        int num_n = sn[len_sn-1] - '0';
        int val = num_m + num_n + forward;
        forward = val/10;
        sum = to_string(val%10) + sum;
        len_sn--, len_sm--;
    }
    int len_more = more.length();
    while (len_more > 0){
        int _m = more[len_more-1] - '0';
        int val = _m + forward;
        forward = val/10;
        sum = to_string(val%10) + sum;
        len_more--;
    }
    if (forward) sum = '1' + sum;
    result = sum;
    return result;
}

int main() {

    vector<string> vec;
    
    string line_0, token_0;
    getline(cin >> ws,line_0);
    stringstream tokens_0(line_0);
    while(getline(tokens_0, token_0, ' ')){
        vec.push_back(token_0);
    }
    
    string result = solution(vec);
    cout << result << endl;
    
    return 0;
}

这题和前些天做的一道 “难题-大数加法” 基本上是一样的。而且题目中的坑也一样,也不知道谁写的解题框架。用了stoi来把输入的字符串改成整数放入vector。int 要能放下5100位的整数,要C++来干嘛!


总结

总的来看题目是比较简单的,只要想到小学生的快车追慢车的时间计算方法,再略加变通即可满分,中间的坑主要是数据类型问题,以及路程分段累加计算,模拟追赶过程这个方法应该是最简单的了,小心别掉简单的坑里就行。肯定也可以用动态规划打表来计算,没有必要就是了。

最后还是要吐槽一下:CSDN的这个在线练习考试系统是真的要好好改一改了啊。满屏的红线黄线,极其影响写代码体验。好像它除了会检测单词拼写是否正确也就没啥别的功能了,干脆你不检测单词拼写还更好点。笔者除了循环计数一般也不用单个字母的变量的,但是t_catch这种命名法用来表示被抓住所需时间是很直观的(至少笔者自己看着很明白),它都给标红!过份的是,solution、result 这种也全红的!甚至double、int、while这些没一个不红的,这看着就不像是检测单词拼写了吧?能告诉我是为什么吗?笔者也知道是可以关的,可关了刷新它就会回来!
在这里插入图片描述
还有这个傻傻的质量评分系统!你究竟要多长,这还有没有一点写作体验了?最近两月是觉得CSDN上看不到以前那种一个链接一篇博文的情况了,但也不是这种傻到要求字数几千的搞法吧?把要讲的问题说明白了,3、5百字还是千儿八百的都很正常!至于搞这种字数不够赶紧去水的东西吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ集群环境部署

文章目录 1. 准备环境2. 修改主机名3. 免密登录配置4. 配置RocketMQ集群5. 搭建RocketMQ集群6. 启动集群 1. 准备环境 准备好三台虚拟机&#xff0c;下面是我的虚拟机的一些基本信息 名称ip地址worker010.117.33.135worker110.117.39.202worker210.117.9.52 三台虚拟机都已经…

Windows下nginx的配置与启动

一&#xff0c;下载 http://nginx.org/&#xff0c;打开官网&#xff0c;点击download 选择下载稳定版 二&#xff0c;解压 1&#xff0c;解压到硬盘某个目录 2&#xff0c;由于80端口被占用&#xff0c;于是我要修改conf目录下的nginx.conf文件 查看端口是否被占用 net…

路径规划算法:基于蝴蝶算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于蝴蝶优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蝴蝶优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蝴蝶…

【C++】类和对象(上):带你速度了解什么是类,如何定义类!!

前言&#xff1a; 前面我们学习C一些基础的内容&#xff0c;也可以说C针对C语言的缺陷进行改进。而今天我们要学的是C的内容也就是类和对象。 一、初识类&#xff1a; 我们先来看看C语言解决一个问题的过程&#xff1a; 假设有以下这个场景&#xff1a;你需要手洗一件衣服&am…

算法Day09 | KMP,28. 实现 strStr() ,459.重复的子字符串

Day09 KMP28. 实现 strStr()459.重复的子字符串 KMP KMP是三个人人名缩写&#xff0c;用于在文本字符串text中搜索pattern字符串&#xff0c;返回在text中第一出现的位置。 算法做法就是在暴力匹配的基础上加速匹配。通过对pattern字符串求next数组(该数组也成为前缀表)&#…

element ui 表格内嵌图片预览展示样式问题 (element plus)

❤️砥砺前行&#xff0c;不负余光&#xff0c;永远在路上❤️ 目录 前言一、问题二、解决 前言 一、问题 二、解决 添加上preview-teleported 属性即可。

ChatGPT ✖️ 前端 = 有点er意思

HOT! HOT! HOT! &#x1f525; &#x1f525; &#x1f525; ChatGPT登上了国内各大平台的热搜榜&#xff0c;应该在去年11月末的时候就有不少同学了解并使用过&#xff0c;那个时候它刚刚问世&#xff0c;在互联网圈子里有了很大的热度&#xff0c;但是对于大众来说&#xff…

OpenGLES读写图像数据(内存与GPU)——使用PBO

一、什么是PBO 在 OpenGL 开发中&#xff0c;特别是在低端平台上处理高分辨率的图像时&#xff0c;图像数据在内存和显存之前拷贝往往会造成性能瓶颈&#xff0c;而利用 PBO 可以在一定程度上解决这个问题。 PBO &#xff08;Pixel Buffer Object&#xff09;是 OpenGL ES 3.…

iOS开发提效cocoapods插件cocoapods-util

cocoapods-util介绍 cocoapods-util是一个iOS开发提效的cocoapods插件。 取名util的原因是我想做一个通用的插件&#xff0c;把一些iOS中常用的命令或问题整理起来。 插件中除了package命令是根据cocoapods-packager插件做了修改而来&#xff0c;其余命令都是属于自己总结开…

uwb高精度定位系统源码 UWB高精度定位技术原理与实现

uwb高精度定位系统 UWB高精度定位技术原理与实现 近些年物联网产业高速发展&#xff0c;越来越多的物联网终端连上了网络&#xff0c;实现了人与物&#xff0c;甚至物与物之间的互连互通。随着智能化要求的进一步提高和物联网应用的进一步拓展&#xff0c;除了互联互通&#x…

Doxygen源码分析:doxygen执行过程的拆解

Doxygen源码分析&#xff1a;doxygen执行过程的拆解 2023-05-19 23:09:17 ~ 2023-05-20 16:38:13 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 Doxygen源码分析&#xff1a;doxygen执行过程的拆解1. doxygen 版本2. doxygen 可执行程序的入口…

System V方案 — 共享内存

目录 System V方案 — 详述共享内存共享内存共享内存的原理共享内存数据结构共享内存函数实例 消息队列消息队列数据结构消息队列函数创建删除 信号量信号量数据结构信号量函数创建删除 进程互斥 总结 System V方案 — 详述共享内存 SystemV标准的进程间通信方式&#xff0c;是…

【react 全家桶】react-Hook(上)

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录 14【react-Hook &#xff08;上&#x…

计算机网络基础知识(六)—— 什么是HTTP协议?你听我说

文章目录 01 | 基本概念02 | 工作原理 && 特点03 | URI && URL04 | 消息结构05 | 请求方法06 | http响应头信息07 | 状态码08 | HTTP的常见安全机制09 | HTTP的缓存机制10 | HTTP/2 && HTTP/3新特性11 | 面试中常见问题 超文本传输协议&#xff08;Hyp…

【前端知识】Cookie, Session,Token和JWT的发展及区别(四)

【前端知识】Cookie, Session,Token和JWT的发展及区别&#xff08;四&#xff09; 9. JWT9.1 JWT的背景及定义&#xff08;1&#xff09;JWT的字面理解&#xff08;2&#xff09;JWT与传统Token的区别 9.2 JWT的组成&#xff08;1&#xff09; Header&#xff08;头部&#xff…

【UDS】诊断故障代码老化机制

文章目录 简介相关术语1. 老化计数器 Ageing counter2. 诊断故障代码已老去 DTC aged3. 已老去计数器 Aged counter4. 操作循环 Operation cycle5. 诊断故障代码老化机制 DTC aging mechanism 总结 ->返回总目录<- 简介 诊断故障代码&#xff08;DTC&#xff09;一旦生…

【IDEA使用指南】使用Hibernate框架的Java项目,如何找到并打开 “Import Database Schema”窗口?

【IDEA使用指南】使用Hibernate框架的Java项目&#xff0c;如何找到并打开 “Import Database Schema”窗口&#xff1f; 背景&#xff1a; 使用 Hibernate 框架时&#xff0c;假如在 “Import Database Schema” 窗口&#xff08;如下图所示&#xff09;时&#xff0c;点击了…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

.Net6 使用aspose.cells23.5.0破译

一、测试代码 internal class Program { static void Main(string[] args) { WorkbookDesigner wb new WorkbookDesigner(new Workbook()); var style new CellsFactory().CreateStyle(); style.Borders.SetColor(C…