不是VIP会员,不能显示答案

题目解答

题目:
打印文件
【问题描述】
路人甲毕业于某职业学校计算机专业,不过,想找一份好工作真难, 在路人乙的推荐下, A公司聘请他担任文印室打印员。
每天 8 点前,A公司的各个部门都会把需要打印的文件送过来。一天的工作就这样开始了, 起先路人甲按照文件送来的先后顺序打印, 一段时间后, 路人甲觉得这个工作非常无聊,于是决定改变打印的顺序。
首先他要求每个部门对送过来的文件都要标上重要度急别 p(1<=p<=9 ) ,接着他再给送过来的 n 个文件按先后顺序从 0 开始标上号码, 然后,他按标号从小到大处理打印:对于当前的第一个文件 a,若后面存在一个未打印的文件 b, b文件的重要度大于 a 文件,则将 a 转移至最后,否则打印文件 a。打印每个文件需 1 分钟,转移文件可认为是瞬间完成的。
路人甲还充分发挥自己的专业特长, 编写了一个程序, 只要第一行输入文件数 n 和需要查询的文件标号 x,第二行依次输入 n 个文件的重要度级别。就可输出打印 x 号文件时的时间。
【样例输入】
6 0
1 1 9 1 1 1
【样例输出】
5
算法:循环队列模拟。如果队首元素的优先级不是最高,把队首元素放到最后,其它元素前移,否则,队首元素出队。
program test6; 
const max=100+10; 
type printer=record 
    flag:longint; 
    priority:longint; 
    end; 
var ans,i,k,j,n,m:longint; 
   printers:array[0..max] of printer; 
   b:boolean;temp:printer; 
begin 
      readln(n,m); 
      for j:=0 to n-1 do 
       with printers[j] do 
        begin 
           read(priority); 
           if j=m then flag:=1 else flag:=0 ; 
        end; 
      ans:=0; 
      while true do 
        begin 
          b:=false; 
          for j:=1 to n-1 do 
              if printers[j].priority>printers[0].priority then 
              begin 
                 temp:=printers[0]; 
                 for k:=1 to n-1 do  printers[k-1]:=printers[k]  ; 
                 printers[n-1]:=temp; 
                 b:=true; 
                 break 
              end; 
          if not b then 
          begin 
            inc(ans); 
            if printers[0].flag=1 then 
            begin 
           writeln(ans) ; 
               break; 
            end 
            else 
            begin 
               for j:=1 to n-1 do 
                 printers[j-1]:=printers[j]; 
			  dec(n) ;
            end; 
          end; 
        end; 
end. 
考点:
分析:
解答:
评论:
老师: