天地无极,乾坤剑法

导航

 

题目描述 

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

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

代码如下:

 1 package com.yzh.hehe;
 2 
 3 import java.util.Scanner;
 4  
 5 
 6 public class TakeBusChooseLine {
 7 
 8     public static void main(String[] args) { 
 9         Scanner scanner=new Scanner(System.in);
10         // "[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10"
11         while (scanner.hasNext()) {
12             
13             String string=scanner.nextLine();
14 //            String string1="\"[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10\"";
15 //            String string2="[13,15,26,7,27,3,30],[1,2,1,2,2,2,1],[5,1,4,3,2,1,4],7,10";
16             String[] sArr=string.split("]");
17             int n=Integer.parseInt(sArr[3].split(",")[1]); 
18             string=sArr[3].split(",")[2];
19             int s=Integer.parseInt(string.substring(0, string.length()-1));
20             String[] stopStrings=sArr[0].substring(2).split(",");
21             String[] periodStrings=sArr[1].substring(2).split(",");
22             String[] intervalStrings=sArr[2].substring(2).split(",");
23             int[] stops=new int[n],period=new int[n],interval=new int[n];
24             for (int i = 0; i < n; i++) {
25                 stops[i]=Integer.parseInt(stopStrings[i]);
26                 period[i]=Integer.parseInt(periodStrings[i]);
27                 interval[i]=Integer.parseInt(intervalStrings[i]);
28                 
29             } 
30             System.out.println(takeBusChooseLine(stops, period, interval, n, s));
31             
32         }
33         scanner.close();
34 
35     }  
36 
37     /*
38      * 三部分组成: 等待上车时间(interval[i]-s%interval[i]);车站停靠时间(stops[i]*period[i]);路上行动时间((stops[i]+1)*5),根据贪心原则三者时间和最短者最先到公司,记得结果要加上起床时的相对时间
39      */
40     private static int takeBusChooseLine(int[] stops, int[] period, int[] interval, int n, int s) {
41         int kaishi=interval[0]-s%interval[0];
42         
43         int shortest=(kaishi==interval[0]?0:kaishi)+stops[0]*period[0]+(stops[0]+1)*5;;
44         int temp=0;
45         for (int i = 1; i < n; i++) {
46             kaishi=interval[i]-s%interval[i];
47             temp=(kaishi==interval[i]?0:kaishi)+stops[i]*period[i]+(stops[i]+1)*5;
48             shortest=shortest>temp?temp:shortest;
49         }
50         return shortest+s;
51     }  
52 }

 

 

posted on 2018-07-05 17:07  天地无极,乾坤剑法  阅读(222)  评论(0)    收藏  举报