前言
- 时间:2020.3.24
- 内容:查车票
- 备注:代码里放了一些小注释,尽量写的能看懂了。。其实中间出来很多小问题,低级错误也在学习群里被大佬教育了一番。。实话说,思考加写代码几分钟,结果debug几小时,真的是“试错性”的学习,相信以后会越来越熟练的叭~奥力给!
- 另:2020.3.28修改 将输出结果调整成题目要求的样子。将avaiSeat改成存放各个站点现可容纳的乘客数的avaiSeats[]数组,将原本单纯存放零一判断该组买票要求是否同过的isOk[]数组 改成当次买票需求时剩余可容纳的乘客数量。
题目
效果图
代码
import java.util.Scanner;
public class Main{
public static void main(String a[]){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
//N:all stations'num
//S:all seats'num
//allNames:all stations'name
//avaiSeat[..]: available seats'num ..now
int N = scan.nextInt(),S = scan.nextInt();
int[] avaiSeats = new int[N];
String[] allNames = new String[N];
//input stations'name
for(int i=0; i<N; i++){
allNames[i] = scan.next();
if(i==N-1) break;
avaiSeats[i] = S;
}
//M:orders'num
//isOK[..]: .. order is OK
int M = scan.nextInt(),bookSeat;
int[] isOk = new int[M];
String[] upNames = new String[M];
String[] downNames = new String[M];
for(int i=0; i<M; i++){
upNames[i] = scan.next();
downNames[i] = scan.next();
bookSeat = scan.nextInt();
//check and do number M is Yes or No
for(int j=0; j<N; j++){
//go on if the name is upName
if(upNames[i].equals(allNames[j]) && avaiSeats[j] >= bookSeat){
avaiSeats[j] -= bookSeat;
for(int k=j+1; k<N; k++){
avaiSeats[k] -= bookSeat;
//if the name is downName, stop minus↑ and plus now↓
if(downNames[i].equals(allNames[k])){
avaiSeats[k] += bookSeat;
isOk[i] = avaiSeats[j] + bookSeat;
break;
}
//to check if middle avaiSeats <0
if(avaiSeats[k]<0)
break;
}
}
}
}
for(int i=0; i<N; i++){
if(isOk[i]>0)
System.out.println(isOk[i] + " YES");
else
System.out.println(isOk[i] + " NO");
}
}
}
}
试错
有关equals和==的混淆
- equal的用法和双等不是一样的。equal是判断数值是否相等,相等返回True,否则返回False;==是判断地址是否相等,相等则返回1,否则返回0。
有关循环
- 这个后来查出来是思考问题,把01背包问题设置成了站点,其实应该设置为位置数的。