


#include<stdio.h> #include<stdlib.h> #include<iostream> #include<math.h> #include<string.h> using namespace std; int m,n,RMA[101],STORE[1001],q=0; void work(int x){ for(int j=1;j<=m;j++){ if(RMA[j]==x)return; //如果能在当前的内存里找到x,则返回 } q++; //找不到,则需要去外存找,q++ if(q<=m){ //如果q的大小小于内存,说明内存没存满可以继续存 RMA[q]=x; }else{ //否则 for(int k=2;k<=m;k++){ //将存满的所有数前移一位(第一个挤出) RMA[k-1]=RMA[k]; } RMA[m]=x; //将数存入内存的最后一个空位 } } int main(){ cin>>m>>n; //存入内存上限m和单词个数n memset(RMA,-1,sizeof(RMA)); memset(STORE,-1,sizeof(STORE)); //RMA是内存,STORE是存储单词 for(int i=1;i<=n;i++){ cin>>STORE[i]; //读入存储单词 } for(int i=1;i<=n;i++){ work(STORE[i]); //使用函数逐个判断存储单词STORE[i]是否在内存里(或是需要去外存查找 } cout<<q; //输出在外存查找次数q return 0; }
原文:https://www.cnblogs.com/CCCDD/p/15212630.html