·¢²¼Ê±¼ä : ÐÇÆÚÁù ÎÄÕÂÅú´¦ÀíϵͳµÄ×÷Òµµ÷¶Èjava¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ
ʵÑé Åú´¦ÀíϵͳµÄ×÷Òµµ÷¶È
Ò»¡¢ ʵÑéÄ¿µÄ
£¨1£© ¼ÓÉî¶Ô×÷Òµ¸ÅÄîµÄÀí½â£»
£¨2£© ÉîÈëÁ˽âÅú´¦ÀíϵͳÈçºÎ×éÖ¯×÷Òµ¡¢¹ÜÀí×÷ÒµºÍµ÷¶È×÷Òµ¡£ ¶þ¡¢ Ô¤±¸ÖªÊ¶ £¨1£© . Èý¡¢ ʵÑéÄÚÈÝ
±àд³ÌÐòÍê³ÉÅú´¦ÀíϵͳÖеÄ×÷Òµµ÷¶È£¬ÒªÇó²ÉÓÃÏìÓ¦±È¸ßÕßÓÅÏȵÄ×÷Òµµ÷¶ÈËã·¨¡£ÊµÑé¾ßÌå°üÀ¨£ºÊ×ÏÈÈ·¶¨×÷Òµ¿éµÄÄÚÈݺÍ×é³É·½Ê½£»È»ºóÍê³É×÷Òµµ÷¶È£»×îºó±àдÖ÷º¯Êý£¬¶ÔËù×ö¹¤×÷½øÐвâÊÔ¡£
import java.util.Scanner;
public class JCB {
public String name; //×÷ÒµÃû public int length; //×÷Òµ³¤¶È public int print; //´òÓ¡»úÊýÁ¿ public int tape; //´Å´ø»úÊýÁ¿ public int runTime; public int waitTime;
public int next; //Ö¸Õë }
class Action{
public final int n=10; //ºó±¸¶ÓÁÐÖÐJCBµÄ×î´óÊýÁ¿ JCB[] jTable=new JCB[n]; //×÷Òµ±í
public int jCount; //×÷Òµ±íÖе±Ç°×÷ÒµÊýÁ¿ public int head; //×÷Òµ±íÍ·Ö¸Õë
//³õʼ»¯º¯Êý
public void Init() {
head=-1; jCount=0; }
//Èë¶Óº¯Êý
public void pushQueue(JCB jcb){
if(jCount>=n) {
System.out.println(\¶ÓÁÐÒÑÂú£¡²»ÄÜÔÙ¼ÓÈ룡\); return ; }
if(head==-1) head=0;
// System.out.println(jTable[jCount]); jTable[jCount]=new JCB();
jTable[jCount].length=jcb.length; jTable[jCount].name=jcb.name; jTable[jCount].print=jcb.print; jTable[jCount].tape=jcb.tape;
jTable[jCount].runTime=jcb.runTime; jTable[jCount].waitTime=jcb.waitTime; jTable[jCount].next=-1; jCount++; }
//³ö¶Óº¯Êý
public void popQueue(int num) {
if(jCount==0) {
System.out.println(\¿ÕµÄ¶ÓÁУ¡²»Äܳö¶Ó£¡\); return ; }
if(num>=jCount) {
System.out.println(\¶ÓÁÐÖв»´æÔÚ¸ÃÔªËØ£¡\); return ; }
if(jCount==1)
{
head=-1;
jTable[0].next=-1; jCount=0; }else{
jTable[num-1].next=jTable[num].next; jTable[num].next=-1; jCount--; } }
public int memory=64*1024; //Ö÷´æ´óС64MB public int tape=4; //´Å´ø»úÊýÁ¿ public int print=2; //´òÓ¡»úÊýÁ¿
//×÷Òµµ÷¶Èº¯Êý
public void dispatch() {
int currJcb,maxJcb;
double currJcbRate,maxJcbRate;
while(head!=-1) {
currJcb=maxJcb=head;
currJcbRate=maxJcbRate=0;
//ÕÒ³öÏìÓ¦±È×î´óµÄ×÷Òµ while(true) {
//ÕÒ³öÂú×ã×ÊÔ´µÄ×÷Òµ
if(jTable[currJcb].length<=memory&&jTable[currJcb].tape<=tape&&jTable[currJcb].print<=print) {
//¼ÆËãÏìÓ¦±È
currJcbRate=(double)jTable[currJcb].waitTime/jTable[currJcb].runTime;
if(currJcbRate>maxJcbRate) {
maxJcbRate=currJcbRate; maxJcb=currJcb; } }
if(jTable[currJcb].next==-1)
{
break; }else{
currJcb=jTable[currJcb].next; } }
//Êä³öÏìÓ¦±È×î´óµÄ×÷Òµ¡¢·ÖÅä×ÊÔ´ if(maxJcbRate!=0) {
memory-=jTable[maxJcb].length; tape-=jTable[maxJcb].tape; tape-=jTable[maxJcb].print;
System.out.println(\Ñ¡ÖеÄ×÷ÒµµÄ×÷ÒµÃûΪ£º\+jTable[maxJcb].name);
popQueue(maxJcb); } } }
public static void main(String[] args) {
String name; int length; int print; int tape; int runTime; int waitTime;
int count; //¼Ç¼ÊäÈë×÷ÒµÊýÁ¿
JCB jcb =new JCB(); //ÁÙʱ×÷Òµ±äÁ¿
System.out.println(\ÇëÊäÈë×÷ÒµÏà¹ØÐÅÏ¢£¬ÒÔ×÷ÒµÃûΪQΪÊäÈë½áÊø¡£\\n\\n°´ÈÎÒâ¼ü½øÈëÊäÈëģʽ£º\);
Action action=new Action(); action.Init();
while(true) {
count=1;