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

文章目录

  • 前言
  • 一、题目
  • 二、解题代码及思路
    • 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.mfbz.cn/a/22358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis高级篇三(分片集群)

一)进行测试Sentinel池: 集群的定义:所谓的集群&#xff0c;就是通过增加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让服务器达到一个稳定、高效的状态 之前的哨兵模式是存在着一些问题的&#xff0c;因为如果主节点挂了&#xff0c;那么sentinel集群会选举新的s…

斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的黑客松活动&#xff0c;现已接受优秀项目提交参赛申请。 在加密行业发展早期&#xff0c;密码极客们就始终在对区块链世界基础设施&#xff0c;在发展方向的无限可能性进行探索。而…

如何用Python进行屏幕录制?

文章目录 引言gpt3.5给出的代码更换截图函数——ImageGrab.grab禁用imshow解决递归现象摄像头录制代码后期需求 引言 关于屏幕录制这个功能需求&#xff0c;之前用过基于ffmpeg的Capture录屏软件&#xff0c;但是fps拉高以后会变得很卡&#xff0c;声音也同样出现卡顿。也自己…

nodej+vues汽车销售4s店服务平台商城系统购物车积分兑换7z9d2

在经济快速发展的带动下&#xff0c;汽车服务平台的发展也是越来越快速。用户对汽车服务信息的获取需求很大。在互联网飞速发展的今天&#xff0c;制作一个汽车服务平台系统是非常必要的。本系统是借鉴其他人的开发基础上&#xff0c;用MySQL数据库和nodejs定制了汽车服务平台系…

【MySQL】事务

事务是一组操作的集合,我们将一组操作视为一个整体,所以事务里面的操作的时候要么同时成功,要么同时失败,之所以会有事务也是因为我们在实际生活中会用到 最典型的例子就是转账操作:A向B进行转账,A这边扣款成功的同时B那边一定是收款成功的,如果没有事务的话就会出现A扣款成功但…

LMS,RGB,XYZ色彩空间转换

前言 首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R,G,B&#xff0c;而是波长分别为700nm&#xff0c;546.1nm&#xff0c;435.8nm的单色红光&#xff0c;单色绿光&#xff0c;单色蓝光。sRGB中的RGB中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB…

网络安全里的主要岗位有哪些?小白如何快速入门?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等&#xff0c;每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低&#xff0c;也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程&#x1f447; 网…

SpringCloud微服务调用方式(RestTemplate)

服务调用方式 RPC和HTTP 无论是微服务还是SOA&#xff0c;都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢&#xff1f; 常见的远程调用方式有以下2种&#xff1a; RPC&#xff1a;Remote Produce Call远程过程调用&#xff0c;类似的还有 。自定义数据格式&am…

learn C++ NO.4 ——类和对象(2)

1.类的6个默认成员函数 1.1.默认成员函数的概念 在 C 中&#xff0c;如果没有显式定义类的构造函数、析构函数、拷贝构造函数和赋值运算符重载函数&#xff0c;编译器会自动生成这些函数&#xff0c;这些函数被称为默认成员函数。 class Date { };初步了解了默认成员函数&am…

STL-常用算法(二.拷贝 替换 算术 集合)

开篇先附上STL-常用算法(一)的链接 STL-常用算法&#xff08;一.遍历 查找 排序&#xff09;_小梁今天敲代码了吗的博客-CSDN博客 目录 常用拷贝和替换算法&#xff1a; copy函数示例&#xff1a;&#xff08;将v1容器中的元素复制给v2&#xff09; replace函数示例&#…

Java 9 - 18 各个版本新特性总结

【 Java 9 - 18 各个版本新特性总结&#xff0c;B站视频介绍】https://www.bilibili.com/video/BV1PT411P7Wn?vd_source5a3a58ca0e99223ffb58cddf2f3a7282 一、模块化引入 模块是 Java 9 中新增的一个组件&#xff0c;可以简单理解为是package的上级容器&#xff0c;是多个pa…

gitlab建立新分支提交,cherry-pick部分更新

gitlab介绍 GitLab是一个基于Git的在线代码托管和协作平台&#xff0c;提供源代码管理、单元测试、CI/CD构建、代码审查等功能。它是一个开放源代码的Git仓库管理系统&#xff0c;使用 Ruby on Rails 构建GitLab 不仅具有自己的 Git 仓库管理系统&#xff0c;还具有很多其他的…

网络协议与攻击模拟-11-DHCP协议原理

DHCP 协议 1、掌握 DHCP 的工作原理 2、会在 Windows server 上去部署 DHCP 服务 3、抓流量 &#xff0e;正常 收到攻击后 一、 DHCP 1、 DHCP 基本概念 dhcp &#xff08;动态主机配置协议&#xff09;&#xff1a;主要就是给客户机提供 TCP / IP 参数&#xff08; IP 地…

App外包开发上线Google Play流程

完成App开发后需要在各大应用市场上线&#xff0c;国内的应用市场比较多&#xff0c;各自的规则也不相同&#xff0c;上线审核也比较复杂&#xff1b;国外上线主要是Google Play市场&#xff0c;它更重视隐私的保护&#xff0c;必须严格按照规范来保护个人隐私&#xff0c;因此…

【C++】模板的一点简单介绍

模板 前言泛型编程函数模板概念格式函数模板的原理函数模板的实例化 类模板类模板的定义格式类模板的实例化 前言 这篇博客讲的是模板的一些基本知识&#xff0c;并没有那么深入&#xff0c;但是如果你是为了过期末考试而搜的这篇博客&#xff0c;我觉得下面讲的是够了的。 之…

阿里云、腾讯云、移动云飙“价”:智能普惠成新风向?

经过过去一年的“低迷”境况之后&#xff0c;2023年云服务商因为AI大模型的爆发&#xff0c;重新燃起了斗志。站在当下的时间节点&#xff0c;云服务商们也在重新思考如何在新形势下&#xff0c;让自己占据更大的优势&#xff0c;于是一场围绕“技术竞争与市场争夺”的新战争打…

【总结】Numpy2

Numpy 1. 数组和数的运算 array1 np.arange(1,10) array1 # array([1, 2, 3, 4, 5, 6, 7, 8, 9]) array1 10 # array([11, 12, 13, 14, 15, 16, 17, 18, 19]) array1 - 10 # array([-9, -8, -7, -6, -5, -4, -3, -2, -1]) array1 * 10 # array([10, 20, 30, 40, 50, 60, 70…

3-《安卓基础》

3-《安卓基础》 一.Android系统架构二.四大组件1. Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.4 面试题面试题1&#xff1a;onSaveInstanceState(Bundle outState)&#xff0c;onRestoreInstanceState(Bundle savedInstanceState) 的调用时机&am…

小黑子—Java从入门到入土过程:第十一章 - 网络编程、反射及动态代理

Java零基础入门11.0 网络编程1. 初识网络编程2. 网络编程三要素3.IP三要素3.1 IPV4的细节3.1.1特殊的IP地址3.1.2 常用的CMD命令 3.2 InetAddress 的使用3.3 端口号3.4 协议3.4.1 UDP协议3.4.1 - I UDP 发送数据3.4.1 - II UDP 接收数据3.4.1 - III UDP 练习&#xff08;聊天室…

前端列表页+element-puls实现列表数据弹窗功能

效果图&#xff1a; 这是一个修改的弹窗&#xff0c;我们要实现的功能是&#xff0c;在列表&#xff0c;点击修改按钮时&#xff0c;将数据带入到弹窗里面&#xff0c;点击保存时关闭弹窗。 1&#xff0c;点击修改展开弹窗 使用 eldialog组件&#xff0c;v-model绑定的值为tru…
最新文章