一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?输入描述:输入一个正整数N, N <= 50。接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100输出描述:输出一个整数表示度度熊最少需要走的距离。输入例子:41 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 输出描述: 输出一个整数表示度度熊最少需要走的距离。 输入例子: 4 1 4 -1 3 输出例子: 4 */ #include #include using 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; }
名企笔试:百度2017春招笔试真题编程题(度度熊回家)2017-05-18 算法爱好者
最新推荐文章于 2021-04-16 15:03:56 发布
