zoukankan      html  css  js  c++  java
  • 度度熊回家

    一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
    但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离? 
    输入描述:

    输入一个正整数N, N <= 50。 
    接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
    输出描述:
    输出一个整数表示度度熊最少需要走的距离。
    输入例子:
    4
    1 4 -1 3
    输出例子:
    4

    思路:这题的关键在如何找到可以去除的那一点。考察连续的三个点,若三点的值都是递增的,如{1,2,5},这样,从第一点到第三点的距离为4;当不是递增的时候,如(2,1,5),那我们只要跳过第二点,就可以得到最短距离为3,如何得到这点了?暴力解法,枚举出缺某一点时,可以省下的距离,然后和一步步走的时候距离相减,就可以得到最短的距离。代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int N;
    10     cin >> N;
    11     
    12     int dist[50];
    13     for (int i = 0; i<N; i++)
    14     {
    15         cin >> dist[i];
    16     }
    17 
    18     int sum = 0, maxDiff = 0;
    19     for (int i = 0; i<N - 1; i++)
    20     {
    21         sum += abs(dist[i] - dist[i + 1]);
    22     }
    23 
    24     int diff = 0;
    25     for (int i = 1; i<N - 1; i++)
    26     {
    27         diff = abs(dist[i - 1] - dist[i]) + abs(dist[i] - dist[i + 1]);
    28         diff-=abs(dist[i - 1] - dist[i + 1]);
    29         maxDiff = max(maxDiff, diff);        //省下的最大距离
    30     }
    31     sum -= maxDiff;
    32     cout << sum;
    33     return 0;
    34 }

    Ref:

    http://m.blog.csdn.net/Double2hao/article/details/72459499

  • 相关阅读:
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    2017软件工程实践总结
    华为软件开发云评测
    android开发——用户头像
    学生&部门智能匹配程序
    学生会里学生汇
    数独棋盘生成器
    读与思
    Java接口
  • 原文地址:https://www.cnblogs.com/love-yh/p/7421797.html
Copyright © 2011-2022 走看看