利用一个数组,下标为要存的数,数值为每次存储的顺序。例如样例中,当1为下标时,存储时数值为1;当2为下标时,存储时数值为2;当5为下标时,存储时数值为4······
#include<bits/stdc++.h> using namespace std; int main() { int m,n,a[1011]={0},x,i,j,su=0;//记得要赋初值!!!!!!! cin>>m>>n; for(i=1;i<=n;i++) { cin>>x; if(a[x]!=0)continue;//说明已经存入数组 su++; if(m!=0){a[x]=i;m--;}//说明内存中还有空间 else //内存无空间,开始替换 { int mi=i,pos=0; for(j=0;j<=1000;j++) { if(a[j]!=0&&a[j]<mi){mi=a[j];pos=j;}//找到内存中最先存入的数 } a[pos]=0;a[x]=i; } } cout<<su; }