华为机试——输出最小跳跃次数

题目描述

* 题目描述:给出一组正整数,你从第一个数向最后一个数方向跳跃,
*         每次至少跳跃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

注意事项

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值