一个数轴上共有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 <iostream>
#include <vector>
using namespace std;
int func(vector<int>& vec)
{
vector<int> dis;
vector<int> res;
dis.resize(vec.size() - 1);
res.resize(dis.size() - 1);
for (auto i = 0; i < dis.size();++i)
{
dis[i] = abs(vec[i + 1] - vec[i]);//相邻两个点的距离
}
int index(0);
for (auto i = 0; i < res.size();++i)
{
res[i] = dis[i] + dis[i + 1] - abs(vec[i+2]-vec[i]);//舍弃当前点所能节省的距离
if (res[i]>res[index])
{
index = i;
}
}
dis[index + 1] = abs(vec[index + 2] - vec[index]);//计算舍弃index点后的新距离
int sum(0);
for (auto i = 0; i < dis.size();++i)
{
if (i == index)
{
continue;//跳过被忽略的点
}
sum += dis[i];
}
return sum;
}
int main()
{
int n;
cin >> n;
vector<int> vec;
vec.resize(n);
for (auto i = 0; i < n;++i)
{
cin >> vec[i];
}
cout << func(vec) << endl;
return 0;
}
895

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



