首页 > 试题广场 >

解救小易

[编程题]解救小易
  • 热度指数:26062 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。

输入描述:
第一行为一个整数n(n ≤ 1000),表示超超一共拥有n个陷阱。
第二行有n个整数xi,表示第i个陷阱的横坐标
第三行有n个整数yi,表示第i个陷阱的纵坐标
保证坐标都在草地范围内。


输出描述:
输出一个整数,表示小易最少可能多少秒就落入超超的陷阱
示例1

输入

3
4 6 8
1 2 1

输出

3
//终于找到一题会做的了
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int[] x = new int[n];
            for(int i = 0; i < n; i++){
                x[i] = sc.nextInt() - 1;
            }
            int min = Integer.MAX_VALUE;
            for(int i = 0; i < n; i++){
                int y = sc.nextInt();
                min = Math.min(min, y - 1 + x[i]);
            }
            System.out.println(min);
        }
        sc.close();
    }
}

发表于 2020-08-17 13:35:07 回复(0)

import java.util.Scanner;

/**
 * Created by ZLei on 2018/8/7.
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int ans = 1000000;
            int trapNum = sc.nextInt();
            int[] x = new int[trapNum];
            int[] y = new int[trapNum];
            for(int i = 0; i < trapNum; i++){
                x[i] = sc.nextInt();
            }
            for(int i = 0; i < trapNum; i++){
                y[i] = sc.nextInt();
                ans = Math.min((x[i]+y[i]-2), ans);
            }
            System.out.println(ans);
        }
        sc.close();
    }
}

发表于 2018-08-07 16:49:09 回复(0)
首先要理解题意, 转换问题, 本题的实质就是找出从(1,1)到 输入的坐标 距离最小的点,横纵坐标和减去2 (!不是欧几里得距离), 
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int nums1[] = new int[num];
        int nums2[] = new int[num];
         int min = 0,index=0,result=0;
        for(int i=0;i<num;i++)
        {
            nums1[i]= sc.nextInt();
        }
        for(int i=0;i<num;i++)
        {
           nums2[i]= sc.nextInt();
        }
        min=nums1[0]-1+nums2[0]-1;
        for(int i=0;i<num;i++)
        {
           if(min>(nums1[i]-1+nums2[i]-1))
           {
              min=(nums1[i]-1+nums2[i]-1);
              index=i; 
           }
        }
        result = nums1[index] - 1 + nums2[index] -1;
        System.out.println(result);
    }
}
        

发表于 2018-07-18 13:51:26 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        int n = Integer.parseInt(line);
        line = scanner.nextLine();
        String []s = line.split(" ");
        int [][] trap = new int[n][2];
        for (int i = 0;i < n;i ++) {
            trap[i][0] = Integer.parseInt(s[i]);
        }
        line = scanner.nextLine();
        s = line.split(" ");
        for (int i = 0;i < n;i ++) {
            trap[i][1] = Integer.parseInt(s[i]);
        }
        int min = min(trap);
        System.out.println(min);
    }

    public static int min(int[][] trap) {
        int min = Integer.MAX_VALUE;
        int minX = trap[0][0],minY = trap[0][1];
        int len = minX + minY - 2;
        for (int i = 0;i < trap.length;i ++) {
            int x = trap[i][0];
            int y = trap[i][1];
            len = x + y - 2;
            if (len < min) {
                min = len;
            }
        }
        return min;
    }
}

发表于 2018-05-21 11:36:28 回复(0)
 import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        if(num<=1000){
            int xx[] = new int[num];
            int yy[] = new int[num];
            for(int i=0;i<num;i++){
                xx[i] = in.nextInt();
            }
            for(int j=0;j<num;j++){
                yy[j] = in.nextInt();
            }
            int min = 1000*1000;
            for(int k=0;k<num;k++){
                if(xx[k]+yy[k] < min){
                    min = xx[k] + yy[k];
                }
            }
            int step = min - 2;
            System.out.println(step);
        }
    }
}
发表于 2018-04-05 16:15:06 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int count = in.nextInt();
            int[] datax = new int[count];
            int[] datay = new int[count];
            int sum = Integer.MAX_VALUE;
            for (int i = 0; i < count; i++)
                datax[i] = in.nextInt();
            for (int i = 0; i < count; i++)
                datay[i] = in.nextInt();
            for (int i = 0; i < count; i++)
                if (datax[i] + datay[i] < sum)
                    sum = datax[i] + datay[i];
            System.out.println(sum - 2);
        }
    }
}

发表于 2017-12-06 19:31:17 回复(0)
import java.util.Arrays;
import java.util.Scanner;




/**
* 获取子节点
*/
public class Main{
   // 本地模拟数据测试
   public static void main(String[] args) {
      Scanner scanner=new Scanner(System.in);
     while (scanner.hasNext()) {
        int n=scanner.nextInt();
        int[]     xtrap=new int[n];
        int[]     ytrap=new int[n];
        for (int i = 0; i < n; i++) {
            xtrap[i]=scanner.nextInt();
        }
        for (int j = 0; j < n; j++) {
            ytrap[j]=scanner.nextInt();
        }
        System.out.println(time(n, xtrap, ytrap));
     }
     
   }
    public static int time(int num,int[] xarr,int[] yarr) {
        int[] times=new int[num];
        for (int i = 0; i <num ; i++) {
            times[i]=(xarr[i]-1)+(yarr[i]-1);
        }
        Arrays.sort(times);
        return  times[0];
    }
}
 
发表于 2017-09-20 21:02:06 回复(0)

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] xi=new int[n+1];
int[] yi=new int[n+1];
for(int i=1;i<n+1;i++){
xi[i]=in.nextInt();
}
for(int k=1;k<n+1;k++){
yi[k]=in.nextInt();
}
in.close();
int[] number=new int[n+1];
for(int i=1;i<n+1;i++){
number[i]=xi[i]+yi[i]-2;
}
int total;
int count=0;
int j=1;
for(int h=2;h<n+1;h++){
if(number[j]>number[h]){
j=h;
                          }
}
total=number[j];
System.out.print(total);
}

}

发表于 2017-09-12 17:40:55 回复(0)
import java.util.Scanner;

public class Main {
	public static void main( String[] args ) {
		Scanner scan = new Scanner(System.in);
                //获取数组长度
		int num = scan.nextInt();
                //因为只计算到(1,1)的距离,只有一个数组就足够
		int[] a = new int[num];
		int i = 0;
                //获取所有横坐标
		while(scan.hasNext()){
			a[i++] = scan.nextInt();
			if(i==a.length) {
				break;
			}
		}
                //获取纵坐标并计算长度,比较最小值
		int min = Integer.MAX_VALUE;
		i = 0;
		while(scan.hasNext()){
			a[i] += scan.nextInt();
			if(a[i]<min){
				min = a[i];
			}
			i++;
			if(i==a.length) {
				break;
			}
		}
		//输出距离-2
                System.out.println(min-2);
	}
}

发表于 2017-09-08 16:26:00 回复(0)

解救小易可以简单理解为从左上角到所有点中步数最小值,因为题中说明了每次都只能横走一步或者纵走一步,所以只需要将要到达的点的横纵坐标进行相加然后减去原始位置1+1即表示到达该点所需要走的步数

public static void main(String[] args){

        int n;
        int a[] = new int[1000];
        int b[] = new int[1000];

        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        for(int i=1; i<=n; i++){
            a[i] = in.nextInt();
        }
        for(int i=1; i<=n; i++){
            b[i] = in.nextInt();
        }

        int dis = 2000;
        for(int i=1; i<=n; i++){
            if(dis > a[i]+b[i])
                dis = a[i] + b[i];
        }

        System.out.print(dis-2);
    }
发表于 2017-08-31 10:29:20 回复(0)
import java.util.*;
public class Main{
public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] a = new int[n];
		for(int i=0;i<n;i++){
			a[i]=scanner.nextInt()-1;
		}
		for(int i=0;i<n;i++){
			a[i]=scanner.nextInt()-1+a[i];
		}
		scanner.close();
		Arrays.sort(a);
		System.out.println(a[0]);
	}
}

发表于 2017-08-30 17:47:36 回复(0)
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] x=new int[n];
        int[] y=new int[n];
        for(int i=0;i<n;i++){
            x[i]=sc.nextInt();
        }
        for(int i=0;i<n;i++){
            y[i]=sc.nextInt();
        }
        int[] sum=new int[n];
        for(int i=0;i<n;i++){
            sum[i]=x[i]+y[i]-2;
        }
        Arrays.sort(sum);
        System.out.println(sum[0]);
    }
}

难道就这样简单吗?反正是通过了。

发表于 2017-08-22 16:24:24 回复(0)