思路:模拟運作,根據提議有兩個隊列,其中等待隊列是雙向隊列
這道題關鍵是變量的定義,使用index來代表程式,再使用一個數組來存儲每個程式執行到第幾條
而每個程式就用vector來存儲每條語句,每個程式又存儲在一個vector裡面
package test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Vector;
public class Test{
static boolean lock = false;//共用鎖
static int N = 1005;//程式最大數目
static LinkedList<Integer> qr;//執行隊列
static LinkedList<Integer> qb;//等待隊列
static Vector<Vector<String>> prg = new Vector<Vector<String>>();
static int T[] = new int[5];//5條指令的執行時間
static int var[] = new int[26];//變量
static int p[] = new int[N];//每個程式執行到那條
static int lim;//時間片
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = null;
System.out.println("input:");
while(!"".equals((line=sc.nextLine().toLowerCase()))){
/*輸入略*/
}
sc.close();
while(qr.size()>0||qb.size()>0){
int index = qr.poll();//準備執行的程式号
int rt = lim;//配置設定時間片
Vector<String> now = prg.get(index);
while(rt>0){
String s = now.get(p[index]);//目前程式的目前指令
if(!lock&&s.contains("=")){
int i = s.substring(0,s.indexOf("=")).charAt(0)-'a';
var[i] = Integer.valueOf(s.substring(s.indexOf("=")));
rt -= T[0];
}else if(!lock&&s.contains("print")){
int i = s.substring(0,s.indexOf(" ")).charAt(0)-'a';
System.out.println(var[i]);
rt -= T[1];
}else if(!lock&&s.contains("lock")){
rt -= T[2];
lock = true;
}else if(!lock&&s.contains("end")){
rt -= T[4];
}else if(s.contains("unlock")){
qr.addFirst(qb.poll());
lock = false;
break;
}else{
break;
}
p[index]++;
}
qr.add(index);//每次都将程式放到隊尾
}
}
}