华为机试---乘坐公交



题目描述

从小明家所在公交站出发有n路公交到公司,现给出每路公交的停站数(不包括起点和终点),及每次停的时间(一路车在每个站停的时间相同)和发车的间隔,先假定每辆车同时在相对时间0分开始发车,且所有车在相邻两个站之间的耗时相同,都为5分钟。给定小明起床的相对时间(相对0的分钟数),请计算他最早到达公司的相对时间。

给定每路车的停站数stops,停站时间period,发车间隔interval及公交路数n,出发时间s。请返回最早到达时间。保证公交路数小于等于500,停站数小于等于50。



import java.util.Scanner;
 
public class Main {
 public static void main(String[] args){
  Scanner scan = new Scanner(System.in);
  while(scan.hasNext()){
   //公交路数
   int n = scan.nextInt();
   //每路车的停站数stops,不包括终点和起点
   int[] stops = new int[n];
   for(int i = 0 ; i < n ; i++){
    stops[i] = scan.nextInt();
   }
   //每路车的停站时间
   int[] period = new int[n];
   for(int i = 0 ; i < n ; i++){
    period[i] = scan.nextInt();
   }
   //每路车的发车间隔
   int[] interval = new int[n];
   for(int i = 0 ; i < n ; i++){
    interval[i] = scan.nextInt();
   }
   //小明的出发时间s
   int s = scan.nextInt();
   System.out.println(chooseLine(stops, period, interval, n, s));
  }  
  scan.close();
    }
 /**
  * 最早到达公司的相对时间
  * 到达时间=起床相对时间 +发车前的等待时间+(站点数+1)*每两站之间的行驶时间+站点数*每个站的停靠时间
  * */
 public static int chooseLine(int[] stops , int[] period , int[] interval , int n ,int s){
  int earliest_time = 0;
  int wait_time = 0;
  int min_time = Integer.MAX_VALUE;
  int temp_time = 0;
  for(int i = 0 ; i < n ; i++){
   //计算乘坐第i路车的等待时间
   wait_time = (s % interval[i] == 0) ? 0 : (interval[i] - s % interval[i]);
   //计算乘坐第i路车到达公司的相对时间
   temp_time = wait_time + period[i] * stops[i] + (stops[i] + 1) * 5;
   min_time = min_time <= temp_time ? min_time : temp_time;
  }
  //计算最早到达公司的相对时间 = 起床相对时间 + 发车前需要等待的时间 + 乘坐第i路公交车路上花费的时间
  earliest_time = s + min_time;
  return earliest_time;
 }
}

你可能感兴趣的:(java,华为)