通过题意得描述,我们大概可以得知这是一个操作系统调度算法的问题,需要实现一个FIFO算法,然后根据所设计的算法来计算各种情况下的缺页次数。
这个题其实不是很难,但是需要自己实现一个类似于队列的数据结构,但是这个数据结构提供遍历功能。其实使用vector就可以实现,时间主要集中在实现上面。因为这个题所给的cache的大小不是特别的大,所以使用数组作为基本的数据结构也就差不多了,所以下面就看看我的代码吧!
#include <iostream>
#include <vector>
using namespace std;
void PushBack(vector<int>& buf, int& tail, int val)
{
if (tail < buf.size())
{
buf[tail++] = val;
}
else
{
int i = 0;
for ( ; i < buf.size()-1; ++i)
buf[i] = buf[i+1];
buf[i] = val;
}
}
bool in_buf(vector<int>& buf, int key,int tail)
{
int sz = buf.size();
for (int i = 0; i < tail; ++i)
{
if (key == buf[i])
{
return true;
cout << "k:" << key << "v" << buf[i] << endl;
}
}
return false;
}
int LackPageTimes(int n, int m, vector<int>& arr)
{
vector<int> buf;
buf.resize(n);
int lptimes = 0;
int tail = 0;
for (int i = 0; i < m; ++i)
{
if (!in_buf(buf,arr[i],tail))
{
++lptimes;
PushBack(buf, tail, arr[i]);
}
}
return lptimes;
}
int main()
{
int m = 0, n = 0;
while (cin >> n, cin >> m) //n~[2,10] m~[1,100]
{
vector<int> arr;
arr.resize(m);
for (int i = 0; i < m; ++i)
{
cin >> arr[i];
}
cout << LackPageTimes(n, m, arr) << endl;
}
return 0;
}