解救小易,c++实现

题目描述:有一片100*100的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。
输入描述:
第一行为一个整数n(n≤100),表示超超一共拥有n个陷阱。
第二行有n个整数xi,表示第i个陷阱的横坐标
第三行有n个整数yi,表示第i个陷阱的纵坐标
保证坐标都在草地范围内。
输出描述:输出一个整数,表示小易最少可能多少秒就落入超超的陷阱。
输入例子1:
3
4 6 8
1 2 1
输出例子1:
3

听说这是一道网易面试题,所以基于面试题的条件,需要快速执行程序且空间不要占用太大,本题代码基于 gcc 8.1.0环境 如果用visual studio 则需将n改为100 或者使用vector 容器进行编写 以便达到使用最小空间。
算法思路,由于小易初始点固定,且只能上下移动(横向纵向移动),直接在输入数据就算出每个陷阱距离小易的距离,最小距离即为最优解。时间复杂度O(n),空间复杂度O(n)
代码如下

#include<iostream>
#include<algorithm>
using namespace std;


int main()
{
   
    int n = 0;
    cin >> n;
    int a[n];
    int b[n];
    int c[n]={0};
    for (int i = 0; i < n;i++)
    {
        cin >> a[i];
        c[i] += a[i] - 1;
    }
    for (int j = 0; j < n;j++)
    {
        cin >> b[j];
        c[j] += b[j] - 1;
    }
    sort(c,c+n);//升序排列
    cout << c[0] << endl;//最小差即为答案
    return 0;
}
发布了16 篇原创文章 · 获赞 3 · 访问量 522

猜你喜欢

转载自blog.csdn.net/weixin_43381566/article/details/105463922
今日推荐