C++百度笔试题

本文介绍了一道百度笔试题,题目要求在数轴上找到一个点忽略,使得度度熊从起点到终点走的总距离最短。输入包含一个正整数N和N个坐标,输出最小距离。解决方案是计算相邻点间距离并查找最大距离之和的点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度笔试题:
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。
接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子1:
4
1 4 -1 3
输出例子1:
4
思路:
首先计算出相邻两点之间的距离,并存入map中在找出找出哪个到前后点距离和最大的一个点,并记录距离和。
代码:

#include<iostream>
#include<vector>
#include<map>

using namespace std;
void length(vector<int> vec,int N){
    map<int,int> tmp;
    int ty=0;
    //计算出两点之间的距离
    for(int i=0;i<N-1;i++){
        if(vec[i]<vec[i+1]){
            tmp[i]=vec[i+1]-vec[i];
        }else{
            tmp[i]=vec[i]-vec[i+1];
        }
      }
    int n=0,j=0;
    //找出哪个到前后点距离和最大的一个点
    for(int i=0;i<tmp.size()-1;i++){
        int tmp2=tmp[i]+tmp[i+1];
        if(tmp2>n){
                n=tmp2;  j=i;
        }
    }
    for(int i=0;i<tmp.size();i++){
            ty+=tmp[i];
        }
        //算出最短距离
    if(vec[j]<vec[j+2]){
        ty=ty-n+vec[j+2]-vec[j];
    }else{
        ty=ty-n+vec[j]-vec[j+2];
    }
    cout<<ty<<endl;
}
int main(){
    vector<int> vec;
    int N;cin>>N;
    if(N<=50){
        for(int i=0;i<N;i++){
            int n;cin>>n;
            if(n<0){
                if(-1*n<=100);
                    vec.push_back(n);
            }else{
                if(n<=100)
                    vec.push_back(n);
           }
    }
    length(vec,N);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值