计蒜客跳跃游戏——C语言
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:A=[2,3,1,1,4]能够跳跃到最后一个下标,输出true
。
A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false
。
输入格式
第一行输入一个正整数 n(1 ≤ n ≤ 500),接下来的一行 n 个整数,输入数组AiA_iAi。
输出格式
如果能跳到最后一个下标,输出true
,否则输出false
。
样例输入
5
2 0 2 0 1
样例输出
true
本题是一个贪心算法的题目,只需要考虑每次最多能够走得步数即可。接下来是我自己写的代码,仅供参考。
#include<stdio.h>
int main()
{
int n,A[500],site=0;//site为走到的最大位置
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
while(site<n-1)
{
int max=0;//用于存储最多可走步数
if(A[site]==0)//如果在A[site]处的数值为0,则说明不能走了,直接跳出循环
{
break;
}
for(int i=1;i<=A[site];i++)//找出最大可走步数
{
if(i+A[site+i]>=max)//判断走i步后走到位置再走该位置可走最大步数是不是最大值,如i=5,A[site+i]=10,就判断15是不是最大可走步数
{
max=i+A[site+i];//存储最大可走步数
}
}
site=site+max;//步数加上最大可走步数
}
if(site>=n-1)//判断可否走到尾部
{
printf("true\n");
}
else
{
printf("false\n");
}
}