前幾天在筆試的時候,算是第一次100%通過率地過了一道編程題,當(dāng)時那個小激動移斩,整理下東西,順便把這個也記下來悦穿。
題目
- 當(dāng)時不能拷貝,具體的題目現(xiàn)在也忘了业踢。大概意思是說一個人要加班栗柒,要從一個地點趕回去公司。然后使用坐標(biāo)來表示位置知举,人的當(dāng)前位置是(0,0)瞬沦,然后公司位置是(x,y),然后附近是有N個出租車的點雇锡,人走過一條街的時間是walkTime逛钻,出租車走過一條街的時間是taxiTime
- 第一行輸入的數(shù)字是出租車點的數(shù)量N。
- 第二行輸入的數(shù)字是出租車點的X坐標(biāo)锰提。
- 第三行輸入的數(shù)字是出租車點的Y坐標(biāo)曙痘。
- 第四行輸入的數(shù)字是辦公室的地點(x,y)。
- 第五行輸入的數(shù)字是走路時間walkTime和taxiTime立肘。
- 輸出結(jié)果:人去到公司的最快時間边坤。
分析
當(dāng)時看到這個題的第一反應(yīng)就是爆炸。因為題目超長的谅年。惩嘉。。而且當(dāng)時時間剩下不到一個半小時踢故,要做三道編程題拔睦琛!殿较!雖然感覺三道都不會耸峭,但是明顯感覺第三道簡單多了。于是就做第三道“魔力手環(huán)”了淋纲,但是第三道做了出來劳闹,時間沒過。洽瞬。只過了50%的測試案例本涕。然后就回來看第一題了。
其實仔細(xì)看題沒啥難的伙窃,因為人到公司的途徑無非兩種菩颖,直接走路回去,或者先走去出租車的點为障,然后坐出租車回去公司晦闰。
走路回去的時間是距離walkTime;
去坐車的時間是去出租車的距離walkTime+出租車到公司的距離*taxiTime鳍怨;
距離就是兩點之間坐標(biāo)的差的絕對值嘛呻右,因為兩點之間是街道。是只能直走的鞋喇。
具體代碼
<code>
// 趕去公司
public class Main2 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int taxiNum = sc.nextInt();
int[] xArray = new int[taxiNum];
int i = 0;
while(i < taxiNum){
xArray[i] = sc.nextInt();
i++;
}
i = 0;
int[] yArray = new int[taxiNum];
while(i < taxiNum){
yArray[i] = sc.nextInt();
i++;
}
int[] office = {sc.nextInt(),sc.nextInt()};
int walkTime = sc.nextInt();
int taxiTime = sc.nextInt();
System.out.println(new Main2().calMinTime(taxiNum,xArray,yArray,office,walkTime,taxiTime));
}
// 計算最短時間
public int calMinTime(int taxiNum, int[] xArray, int[] yArray, int[] office, int walkTime, int taxiTime) {
// 定義一個最快時間參數(shù),賦值為直接步行到公司的時間
int minTime = calDistanceOfTwoPoint(office)walkTime;
for(int i = 0;i<taxiNum;i++){
// 取出出租車的X坐標(biāo)和Y坐標(biāo)
int[] taxi = {xArray[i],yArray[i]};
// 計算步行到該點的步行時間
int walkToTaxiTime = calDistanceOfTwoPoint(taxi)walkTime;
// 計算從該點開車到公司的時間
int driveToOfficeTime = calDistanceOfTwoPoint(office,taxi)*taxiTime;
int allTime = walkToTaxiTime + driveToOfficeTime;
if(allTime < minTime){
minTime = allTime;
}
}
return minTime;
}
// 計算原點到目標(biāo)點的距離
public int calDistanceOfTwoPoint(int[] target ){
int i = Math.abs(target[0])+Math.abs(target[1]);
return i;
}
// 計算兩點之間的距離
public int calDistanceOfTwoPoint(int[] target, int[] from ){
int i = Math.abs(from[0] - target[0])+Math.abs(from[1] - target[1]);
return i;
}
}</code>