C语言/跳跃游戏(Jump Game)
先看要求
题意理解:如题意所示,但注意 “可以跳跃的最大长度”指的是可跳跃范围!
解题思路:做法有多种,最简单的利用多重嵌套if-else if-else或多重循环嵌套(for、while等)这里就不演示了。
通过贪心法来解决这道题,每次到达一个位置之后,我们都有一个可以选择的跳转范围,如果在这个范围里,我们可以选出最优跳跃路径(即最远可以达到哪个位置),就可以直接抛弃其他路径,进而解决下一步。如此反复,最后我们就能得出最后可以到达数组的哪个位置,因此,我们只要掌握了最后能到达哪个位置,就能知道可不可以达到数组末端了。
思路解决了,但是我们考虑到非负数组中还有一个特殊的存在,即0。可以跳跃范围为0的话,就无法进行跳转了,停在原地。此时分有两种情况,一是我们在前往数组末端的路上遇到了0了,那么我们就不可能达到末尾了,游戏结束,输出false.。二是虽然我们遇到了0,但是我们已经在末尾了,游戏结束,但应该输出true。所以这里需要一个判定处理,
代码部分(带详细注释)
#include <stdio.h>int main(){int i,j,z,index=0,insert=0;int a[5],b[5]={0,0,0,0,0};for(j=0;j<5;j++){scanf("%d",&a[j]);}for(i=0;i<4;i=i+index ){if(a[i] == 0){ //可跳转范围为0,跳转结束if(i!=4){ //当可跳转范围为0,但为最后一个元素,说明已走到末尾break; //跳出循环}elsei=4;}for(j=i+1;j<=a[i];j++){ //将下一步所有可走路径保存在b[]中 例如: 3 2 1 0 4 中第一个元素的下一步 3->2 3->1 3->0b[i]=i+a[i]; // 按照下一步的可走路径将距离值保存在b[]的 例如:3->2 3->1 3->0(随便起的名字)距离值:1+2 2+1 3+0 三者可走距离值一样 }z=sizeof(b) / sizeof(int);for(;z>=0;z--){ //选出最优路径 并记录元素位置即下一跳转(最优) if(insert<b[z]){ //利用for()与if()选出b[]中最大值index = a[z]; //最优路径:当数组下标与数组元素的值之和最大时,可供选择的跳转范围最远insert=b[z];}}}if(i>=4){printf("ture\n");}else printf("false\n");return 0;
}
C语言/跳跃游戏(Jump Game)相关推荐
- LeetCode—55.跳跃游戏(Jump Game)——分析及代码(C++)
LeetCode-55.跳跃游戏[Jump Game]--分析及代码[C++] 一.题目 二.分析及代码 1. 贪心 (1)思路 (2)代码(简洁) (3)代码(高效) (4)结果 三.其他 一.题目 ...
- 116 · 跳跃游戏 Jump Game
116 · 跳跃游戏 Jump Game 描述 Given an array of non-negative integers, you are initially positioned at the ...
- LeetCode 55 -- 跳跃游戏 ( Jump Game ) ( C语言版 )
题目描述 : 解题思路 : 本题目不能一开始从最大长度进行跳跃 , 应该一次次遍历每个数组元素 , 采用贪心法 , max表示每次能够到达的最远距离 , 使用max=max<i+nums[i] ...
- C语言——跳跃游戏 II
题目描述: 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 假设你总是可以到达 ...
- 跳跃游戏 Jump Game 分析与整理
参考文章 点这儿查看 给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以向后跳跃的最大长度. 问题一 判断你能不能到达数组的最后一个位置. 思路:从数组的第一个位置开 ...
- 运用贪心思想解决跳跃游戏
运用贪心思想解决跳跃游戏 文章目录 运用贪心思想解决跳跃游戏 Jump Game I 1.题目描述 2.分析 3.代码 Jump Game II 1.问题描述 2.分析 3.动规代码[超时] 4.贪心 ...
- JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码) backtrackingJumpGame.js完整源代码 backtrackingJumpGame. ...
- 55.跳跃游戏(Jump Game)
我的GitHub,欢迎捧场:https://github.com/FuGaZn/LeetCode 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的 ...
- C++jump game跳跃游戏的算法(附完整源码)
C++jump game跳跃游戏的算法 C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数测试) C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数 ...
最新文章
- 自定义控件(一) Activity的构成(PhoneWindow、DecorView)
- 小学听课计算机笔记范文,小学教师听课记录精选10篇【最新】.pdf
- Activiti 工作流引擎的初步使用
- php html 文本域,html文本域标签属性有哪些?html文本域标签属性用法介绍
- linux 网络编程:使用两线程实现socket同时收发数据
- php将变量转成字符串类型
- 7种方式,教你提升 SpringBoot 项目的吞吐量
- SNF软件开发机器人2018最新更新内容
- Elasticsearch:InteliJ Elasticsearch plugin 集成
- 苹果ios签名过期了,APP应用还能照常使用吗?
- Shadow 腾讯插件化——深度解剖框架设计
- 接口自动化参数化(一)
- 生成SSH Key(linux)
- bp神经网络需要多少样本,bp神经网络训练时间
- 【Redis笔记】发布与订阅
- libuv 使用点滴
- 原生JS 实现放大镜
- 【BZOJ3670】【UOJ5】【NOI2014】动物园
- 用友U9,U9C学习资料
- 【ICS551 时钟缓冲器国产替代量产】