盗贼跨越墙壁所需的跳跃次数

盗贼跨越墙壁所需的跳跃次数

想象一下一个囚犯(或小偷)想要从监狱逃脱。为了做到这一点,他需要越过 N 个长度不同的墙。他每次跳跃可以爬升 X 英尺。但是,由于墙壁很滑,他每次跳跃后会下滑 Y 英尺。因此,我们需要计算穿越所有墙壁所需的跳跃次数。在本文中,我们将探讨不同的C++技术,以找到逃脱监狱所需的跳跃次数。

输入输出场景

我们以数组的形式有不同高度的 N 面墙。 X 是跳跃长度,而Y 是他后退的长度。我们有跳跃次数作为输出。

Input: height[] = {5, 18, 10, 3}       N = 4, X = 5, Y = 2Output: 11Input: height[] = {15, 8, 10, 3, 5, 12}       N = 6, X = 5, Y = 2Output: 16

使用迭代方法

在这里,我们使用forwhile循环来找到跳跃次数。

当墙的高度小于跳跃长度(x)时,可以单次跳跃越过墙。因此,numJumps增加一。我们使用 continue 语句来停止剩余的循环并继续进行下一个循环。

当高度大于跳跃长度时,我们使用while循环通过h – (x – y)计算跳跃次数,直到剩余高度变小大于或等于跳跃长度。

接下来,我们为最后一面墙添加一次跳跃。

Example

的中文翻译为:

示例

#include using namespace std;int numOfJumps(int x, int y, int N, int heights[]) {   int numJumps = 0;   // When the height is less than jump length   for (int j = 0; j = heights[j]) {         numJumps++;         continue;      }      // When the height is more than jump length      int h = heights[j];      while (h > x) {         numJumps++;         h = h - (x - y);      }      numJumps++;   }   return numJumps;}int main() {   int N = 5; // Number of walls   int x = 4; // jump height   int y = 1; // length after he slips back   int heights[] = {5, 18, 10, 3, 5};   int minJumpsRequired = numOfJumps(x, y, N, heights);   cout << "Minimum number of jumps required: " << minJumpsRequired << endl;   return 0;}

输出

Minimum number of jumps required: 14

使用直接计算

以下是计算小偷越过墙壁所需跳跃次数的公式 –

Jumps = ceil((h - y) / static_cast(x - y))

我们使用一个for循环来遍历每堵墙。当前墙的高度存储在变量h中。

然后,我们用公式直接计算出需要的跳跃次数。我们使用 ceil 函数将值四舍五入到最接近的整数。

Example

的中文翻译为:

示例

#include #include using namespace std;int numOfJumps(int x, int y, int N, int height[]) {    int numJumps = 0;        for (int j = 0; j < N; j++) {        int h = height[j];        int jumpsRequired = ceil((h - y) / static_cast(x - y));        numJumps += jumpsRequired;    }        return numJumps;}int main() {    int x = 8, y = 2;    int height[] = { 4, 14, 8, 16, 20, 11 };    int N = sizeof(height) / sizeof(height[0]);        int minJumpsRequired = numOfJumps(x, y, N, height);    cout << "Minimum number of jumps required: " << minJumpsRequired << endl;    return 0;}

输出

Minimum number of jumps required: 12

使用除法和模运算符

我们还可以使用 除法 (/)取模 (%) 运算符来计算跳跃的次数。在这里,我们计算墙的高度与跳跃长度之间的差值。如果差值大于0,我们通过将其除以 (x-y) 来计算跳跃次数。如果有余数,我们就加一。而如果差值为零或负数,则我们只需要一次跳跃。

Example

的中文翻译为:

示例

#include using namespace std;int numOfJumps(int x, int y, int N, int height[]) {   int jumps = 0;   for (int j = 0; j  0) {         jumps++;         // Additional jumps         jumps += diff / (x - y);         // If there is a remainder, increment the jumps         if (diff % (x - y) != 0)            jumps++;      }      // When height is less than jump length      else {         jumps++;      }   }   return jumps;}int main() {   int N = 5; // Number of walls   int x = 5; // jump height   int y = 2; // length after he slips back   int height[] = { 15, 8, 10, 3, 5, 12};   int minJumpsRequired = numOfJumps(x, y, N, height);   cout << "Minimum number of jumps required: " << minJumpsRequired << endl;   return 0;}

输出

Minimum number of jumps required: 12

结论

我们讨论了各种方法来确定小偷越墙的跳跃次数。我们可以使用迭代方法。我们可以直接使用公式来代替这样的迭代。另外,我们可以使用除法取模运算符来解决这个问题。

以上就是盗贼跨越墙壁所需的跳跃次数的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:02:45
下一篇 2025年12月16日 11:39:05

相关推荐

  • C中的空指针

    C 中的 void 指针是不与任何数据类型关联的指针。它指向存储中的某个数据位置,意味着指向变量的地址。它也称为通用指针。在 C 语言中,malloc() 和 calloc() 函数返回 void * 或通用指针。 它有一些限制 – 1) 由于 void 指针的原因,指针运算不可能使用 …

    2025年12月17日
    000
  • 加密字符串

    加密是一种通过使用某些技术或某些步骤来更改数据的技术,使其更改为另一种信息或无法直接从中收集到先前的信息。对于加密,我们必须遵循针对特定加密类型固定的某些步骤。 在这个问题中,我们将得到一个字符串,我们必须按照给定的步骤对其进行加密 – 首先,我们必须获取包含相同字符的所有子字符串,并将…

    2025年12月17日
    000
  • 二叉堆的数组表示

    遵循堆排序属性的完全二叉树称为二叉堆。 根据二叉堆的排序方式,它可以分为两种类型: 最小堆是节点的值大于或等于其父节点的值的堆。最小堆的根节点最小。 最大堆是节点的值小于或等于其父节点的值的堆。最大堆的根节点最大。 二叉堆的值通常表示为一个数组。二叉堆的数组表示如下: 根元素的索引为0。 如果i是数…

    2025年12月17日
    000
  • 可憎的数字

    如果一个数字在其二进制展开中有奇数个1,则被认为是奇异数。前10个奇异数是1,2,4,7,10,11,13,14,16,19,21。有趣的是,所有2的幂都是奇异数,因为它们只有1个位被设置。 下面的文章详细讨论了两种判断一个数字是否为可恶数字的方法。 问题陈述 这个问题的目的是检查给定的数字是否是一…

    2025年12月17日
    000
  • 检查是否可能从原点到达给定圆的周长上的任意点

    圆的周长可以定义为圆的外边界。它是圆的周长。圆周围的每个点都遵循某些属性,如下所示 – 点 (x,y) 位于圆内,使得 $mathrm{x^2 + y^2 点 (x,y) 位于圆上,使得 $mathrm{x^2 + y^2 = R^2}$ 点 (x,y) 位于圆外,使得 $mathrm{…

    2025年12月17日
    000
  • 使用C++编写一个找到数字的程序,其数字的各位数之和为偶数的程序

    能被2整除的整数是偶数。因此在本文中,我们给定了一个数n,我们需要找到第n个数字,其数字之和为偶数。前五个数字的数字之和为偶数的数分别是2、4、6、8和11。例如 − Input : n = 5Output : 11Explanation : First 5 numbers with even su…

    2025年12月17日
    000
  • 在C和C++中的未定义行为

    在这里,我们将看到一些C和C++代码,并尝试猜测结果。这些代码将生成一些运行时错误。 1. 除以零的错误是未定义的。 示例代码 #include using namespace std;int main() { int x = 10, y = 0; int z = x / y; cout <&…

    2025年12月17日
    000
  • C语言中的数组

    数组是连续内存位置上相同类型元素的集合。最低地址对应于第一个元素,最高地址对应于最后一个元素。 数组索引以零 (0) 开始,以数组大小减一(数组大小 – 1)结束。数组大小必须是大于零的整数。 让我们看一个例子, If array size = 10First index of arra…

    2025年12月17日
    000
  • .NET控制台应用程序开发:不仅仅是“Hello World”

    现代.NET控制台程序可处理文件、调用API、读取配置、执行定时任务,支持命令行参数解析、配置文件管理、日志记录与外部服务调用,结合合理结构可成为高效工具。 很多人接触 .NET 的第一行代码都是从控制台程序的 “Hello World” 开始的。这确实是个不错的起点,但如果…

    2025年12月17日
    000
  • .NET怎么在程序中执行一个外部exe文件

    使用System.Diagnostics.Process类可执行外部exe文件,通过Process.Start启动进程,支持简单调用和ProcessStartInfo配置参数、工作目录、窗口行为及输出重定向,需注意路径、权限和异常处理。 在 .NET 程序中执行外部 exe 文件,最常用的方式是使用…

    2025年12月17日
    000
  • .NET怎么将一个整数转换为十六进制字符串

    在.NET中,使用ToString(“X”)可将整数转为大写十六进制字符串,如255转为”FF”;用ToString(“x”)则转为小写,如”ff”;可通过拼接添加”0x”前缀,如…

    2025年12月17日
    000
  • .NET怎么通过反射获取对象的属性和方法

    答案:在.NET中,通过反射可动态获取类型信息并操作对象成员。使用GetType()或typeof()获取Type对象,调用GetProperties()遍历属性并用GetValue/SetValue读写值,通过GetMethods()获取方法并用Invoke执行,支持参数传递;需注意性能开销及默认…

    2025年12月17日
    000
  • .NET Web API如何使用Swagger生成API文档

    在 .NET Web API 中集成 Swagger 可自动生成可交互的 API 文档。首先通过 NuGet 安装 Swashbuckle.AspNetCore 包,然后在 Program.cs 中添加 AddEndpointsApiExplorer() 和 AddSwaggerGen() 服务,并…

    2025年12月17日
    000
  • .NET的AssemblyFileVersionAttribute类的作用是什么?

    AssemblyFileVersionAttribute用于指定程序集的文件版本,主要在文件系统中显示,不影响运行时;而AssemblyVersionAttribute定义程序集的逻辑版本,影响运行时加载和绑定,二者可独立设置,常用于区分发布版本与内部构建。 AssemblyFileVersionA…

    2025年12月17日
    000
  • .NET的AssemblyVersionCompatibility枚举如何设置兼容性?

    AssemblyVersionCompatibility枚举定义CLR处理程序集版本兼容性的策略,其值如MayChangeMinorVersions要求主版本匹配且次版本可升级,SameMajorVersion允许主版本相同下的任意次版本、内部版本和修订号,SameVersion则要求完全匹配,而S…

    2025年12月17日
    000
  • ArgumentOutOfRangeException如何避免?参数范围检查

    避免argumentoutofrangeexception的核心在于在方法入口处对参数进行预判和有效性检查,1. 使用if语句结合throw new argumentoutofrangeexception进行基础校验;2. 采用卫语句模式或静态辅助类(如guard)提升代码复用性和可读性;3. 在.…

    2025年12月17日
    000
  • MissingMethodException是什么?动态调用方法异常

    missingmethodexception发生在运行时找不到指定方法,常见于反射或程序集版本不匹配;2. 动态调用绕过编译时检查,导致错误延迟到运行时暴露;3. 防御性编程、日志记录、bindingredirect配置和fusion log viewer可有效诊断和避免该异常;4. missing…

    2025年12月17日
    000
  • c#用什么软件编程?

    c#可有的编程软件:Visual Studio、Visual Studio Code、MonoDevelop、SharpDevelop、Rider、SlickEdit、C# Pad、Jdoodle、.NET Fiddle、Scriptcs等等。 C#是微软公司发布的一种面向对象的、运行于.NET F…

    2025年12月17日 好文分享
    000
  • 怎么精通C语言?

    对于c语言,很多人都知道,可能也有很多人大学甚至中学也学习过,可能只是熟悉或者仅仅了解,能说自己精通的应该能在前面的基础上能砍掉大部分人,所以有人就想知道,那该怎样才能精通c语言呢? 一. 先具备一定的计算机基础,为后续提升做好准备 是科班出身的直接学习C语言,算是驾轻就熟,相对来说障碍少一些。不是…

    2025年12月17日
    000
  • RSS订阅中的作者信息格式

    RSS和Atom中作者信息通过或标签标识,包含姓名、邮箱及网站链接,支持多作者;正确设置有助于提升内容可信度、便于追踪与SEO。 RSS订阅中的作者信息格式,主要用于标识文章的作者,让读者知道是谁写的,方便追踪特定作者的内容。格式通常包含作者姓名、邮箱,有时还会包含作者的网站链接。 作者信息的常见格…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信