在计算机中,页式虚拟存储器实现的一个难点是设计页面调度(置换)算法。其中一种实现方式是FIFO算法。
FIFO算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
假设Cache的大小为2,有5个页面请求,分别为 2 1 2 3 1,则Cache的状态转换为:(2)->(2,1)->(2,1)->(1,3)->(1,3),其中第1,2,4次缺页,总缺页次数为3。
现在给出Cache的大小n和m个页面请求,请算出缺页数。

代码如下:

 1 import java.util.LinkedList;
 2 import java.util.Queue;
 3 import java.util.Scanner;
 4 
 5 
 6 public class Main {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         Scanner scanner=new Scanner(System.in);
11         Queue<Integer> queue=new  LinkedList<>();
12         while(scanner.hasNext())
13         {
14             int n=scanner.nextInt();//Catche大小
15             int m=scanner.nextInt();//页面总数
16             int sum=0;
17             int copy=m;
18 
19                 while(copy>0)
20                 {
21                     int a=scanner.nextInt();
22                     
23                         if(!queue.contains(a))
24                         {
25                             sum++;
26                             if(queue.size()<n)
27                             queue.add(a);
28                             else{
29                                 queue.poll();
30                                 queue.add(a);
31                             }
32                         }
33                         copy--;
34                 
35             }
36 
37             System.out.println(sum);
38                 sum=0;
39                 queue.clear();
40         }
41     }
42 
43 }