自己的解題程式碼
import java.util.Scanner;
public class RockabyeTobby {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//讀入要解幾組Case
int t=Integer.parseInt(scanner.nextLine());
//一組case的for-loop
for(int i=0;i<t;i++){
//讀一行: 藥物種類量drugNum 要吃的總藥量drugTimes
String[] buffer=scanner.nextLine().split(" ");
//這裡我是讀一行在拆解 直接scanner.nextInt()讀不知道為什麼會有問題
int drugNum=Integer.parseInt(buffer[0]);
int drugTimes=Integer.parseInt(buffer[1]);
//藥物的class
DrugData[] drugData=new DrugData[drugNum];
//把所有藥物的種類和頻率全部讀起來
for(int j=0;j<drugNum;j++){
//跟上面一樣,讀一行後用拆的
String[] buffer2=scanner.nextLine().split(" ");
String drugName=buffer2[0];
int frequent=Integer.parseInt(buffer2[1]);
//建立藥物資料
drugData[j]=new DrugData(j,drugName,frequent,frequent);
}
//開始吃藥,總共吃 drugTimes 個
for(int j=0;j<drugTimes;j++){
//temp 目前最小的吃到的時間moment 一開始設為最大值 index為最小值的陣列索引值
int temp=Integer.MAX_VALUE,index=0;
//check最小moment
for(int k=0;k<drugNum;k++){
if(drugData[k].moment<temp){
//比較小就記綠起來
temp=drugData[k].moment;
index=k;
}
}
//吃到藥後記綠一次,後面要加一次頻率
drugData[index].printDrug();
drugData[index].moment+=drugData[index].frequency;
}
}
scanner.close();
}
}
//藥物的class
class DrugData{
int priority;//優先度,但後來發現用陣列的順序就行了,這個參數多餘了
String name;//藥物名
int frequency;//吃的頻率
int moment;//目前吃到的時間
public DrugData(int priority, String name, int frequency, int moment) {
super();
this.priority = priority;
this.name = name;
this.frequency = frequency;
this.moment = moment;
}
//吃到一次藥後印出一行
void printDrug(){
System.out.println(this.moment+" "+this.name);
}
}
第二天終於結束了,沒想到要為程式做解說要花一個多小時= =。