名企笔试:百度2017春招笔试真题编程题(度度熊回家)2017-05-18 算法爱好者

来源:互联网 发布:r230清零软件 编辑:程序博客网 时间:2024/05/23 23:14
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。
现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,
问度度熊回家至少走多少距离?

输入描述:
输入一个正整数N, N <= 50。
接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100

输出描述:
输出一个整数表示度度熊最少需要走的距离。

输入例子:
4
1 4 -1 3

输出例子:

4

C++源代码:

//Baidu problem 2017.05.18//2017.05.19 by wyj/*名企笔试:百度2017春招笔试真题编程题(度度熊回家)2017-05-18 算法爱好者一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?输入描述:输入一个正整数N, N <= 50。接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100输出描述:输出一个整数表示度度熊最少需要走的距离。输入例子:41 4 -1 3输出例子:4*/#include#includeusing namespace std;int main(){int n, i;int P[50];int S[50];int sum = 0, s_min, s_save = 0, pos;cin >> n;for (i = 0;i < n;i++)cin >> P[i];for (i = 1;i < n;i++)//不忽略任何坐标需走总路程sum += abs(P[i] - P[i - 1]);for (i = 1;i < n - 1;i++){int save = abs(P[i] - P[i - 1]) + abs(P[i] - P[i + 1]) - abs(P[i + 1] - P[i - 1]);if (s_save < save){s_save = save;//能节省最大路程pos = i;//忽略的点}}s_min = sum - s_save;cout << "pos=" << pos << ' ' << "s_min=" << s_min << endl;return 0;}

阅读全文
0 0
原创粉丝点击