题目描述
* 题目描述:给出一组正整数,你从第一个数向最后一个数方向跳跃,
* 每次至少跳跃1格,每个数字的值表示你这个位置可以跳跃的最大长度。
* 计算如何以最少的跳跃次数跳到最后一个数。
* 输入描述:
* 第一行表示有多少个数n
* 第二行依次是1到n,一个数一行。
* 输出描述:
* 输出一行,表示跳跃最少的次数
代码实现
/******************************************************************
* 题目描述:给出一组正整数,你从第一个数向最后一个数方向跳跃,
* 每次至少跳跃1格,每个数字的值表示你这个位置可以跳跃的最大长度。
* 计算如何以最少的跳跃次数跳到最后一个数。
* 输入描述:
* 第一行表示有多少个数n
* 第二行依次是1到n,一个数一行。
* 输出描述:
* 输出一行,表示跳跃最少的次数
*****************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#define NUM_BUF_SIZE 100 /* 最大可存储的数字数量 */
int main()
{
int input[NUM_BUF_SIZE],res[NUM_BUF_SIZE];
int num;
int i=0,j=0;
int temp = INT_MAX;
scanf("%d",&num);
memset(input,0,sizeof(input));
memset(res,0,sizeof(res));
while(i<num)
{
scanf("%d",&input[i]);
i++;
}
for (i = 1; i < num; i++)
{
temp = INT_MAX;
for (j = 0; j < i; j++)
{
if (input[j] + j >= i) /* 找到可以跳出当前的点的值 */
{
temp = temp <= (res[j] + 1) ? temp : (res[j] + 1);
}
}
res[i] = temp;
}
printf("%d\n",res[num-1]);
}
测试描述
输入:
7
2
3
2
1
2
1
5
输出:
3

注意事项
无
本文详细解析了一种算法,该算法旨在找出从一系列正整数的起始位置到达末尾所需的最少跳跃次数,每次跳跃的距离由所在位置的数值决定,且至少跳跃1格。文章通过实例演示了算法的具体实现过程。
536

被折叠的 条评论
为什么被折叠?



