您的位置:首页 > 编程语言 > Java开发

爬行的蚂蚁-Java-2017百度秋招

2017-05-27 15:20 218 查看
package 百度;

import java.util.Scanner;

/**
* 题目描述:
* 有些蚂蚁在一条水平线上爬行,每只蚂蚁的速率都是1cm/s。蚂蚁爬到水平线的任何一个端点时会立刻掉下来,当两只蚂蚁碰到一起时他们都会立刻调头向相反方向移动。
* 已知蚂蚁们在水平线上的初始位置,但不幸的是,它们初始的运动方向是不知道的。请计算所有蚂蚁从水平线上掉下来可能所需的最早和最晚的时间。
*
* 输入 :第一行有一个整数,表示有多少组测试数据。
* 每组测试数据以两个整数开始:水平线长度(单位cm)和蚂蚁数,随后的一行中有n个整数,表示每只蚂蚁距水平线左端点的距离。所有的输入的整数都小于1000000而且用空格隔开。
* 样例输入 2
* 10 3
* 2 6 7
* 214 7
* 11 12 7 13 176 23 191
*
* 输出: 对于每组测试数据,在同一行输出两个整数,第一个表示所有蚂蚁从水平线上掉下来的最早时间,第二个表示最晚时间。
* 样例输出 4 8
* 38 207
*
* @author 崔洪振367
* @version 创建时间:2017年5月15日 下午4:41:06
*
* 解题思路:在给定的水平线上寻找两个值:一个值是距离某个端点最近,另一个值距离某个端点最远。输出这两个值。
* 最远的距离也就是离着最近的端点的相反端点。比如:水平长度为10,则2的最近点是0,最远距离是10-2=8.
*/
public class Q2017秋招_爬行的蚂蚁 {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int T = scanner.nextInt();
for(int t=0; t<T; t++){
int len = scanner.nextInt();//水平长度
int ant = scanner.nextInt();//蚂蚁数目
int[] ants = new int[ant];//每只蚂蚁距离
int lens = len / 2;//水平中点长度
for(int i=0; i<ant; i++){
int dis = scanner.nextInt();
if(lens >= dis){
ants[i] = dis;
}else {
ants[i] = len - dis;//全长-远距离=近距离
}
}
int max = 0;
int min = lens;
for(int i=0; i<ant; i++){
max = Math.max(max, ants[i]);//要所有蚂蚁都掉下来,则最早时间是位于中点位置处的蚂蚁到达端点的时间
min = Math.min(min, ants[i]);//最晚掉下来的蚂蚁是距离一个端点最近的相反方向的端点。
}
System.out.println(max + " " + (len-min));
}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: