0
已解决
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n,a[500],x,j=0,count=0,flag;
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>x;
flag=0;
for(int k=1;k<=m;k++){
if (a[k]==x) {
flag=1;
break;
}
}
if (flag==0){
if (j<m){
j++;
a[j]=x;
}
else {
j=1;
a[j]=x;
}
count++;
}
}
cout<<count;
return 0;
}
大佬教我!!!
1
已采纳
这道题可用队列做,但我用的是一个数组,来模拟队列。
for(int i=1; i<=n; i++) { if(c[a[i]]==0) { ans++; if(n1==m) { c[b[1]]=0; for(int j=1; j<n1; j++) b[j]=b[j+1]; b[n1]=a[i]; c[a[i]]=1; } else { c[a[i]]=1; b[++n1]=a[i]; } } } 输出的是ans
2
0
0
0
for (i=1;i<=n;i++)
{
flag=0;
for (j=1;j<=m;j++)//如果笔记里已经有该字符flag=1
if (a[i]==b[j]) flag=1;
if (flag==0)
{
s++;//需查字典的次数+1
if (k<m)
b[++k]=a[i];//记录该字符
else
b[++k2]=a[i];//清空原来的,记录新的字符
if (k2==m) //再次从第1页开始替代旧的字符
k2=0;
}
}
核心代码
0
定义jsb[101],dc[1001];
int s(int ddz,int m);
int main()
{
memset(jsb,-1,sizeof(jsb));
memset(dc,-1,sizeof(dc));
定义n,m,j=0,k=0,f;
输入m,n
for(int i=0;i<=n-1;i++) cin>>dc[i];
for(int i=0;i<=n-1;i++)
{
f=s(dc[i],m);
if(f==0)
{
jsb[k%m]=dc[i];
k++;
j++;
}
}
输出j
}
int s(int ddz,int m)
{
for(int i=0;i<=m-1;i++)
{
if(ddz==jsb[i]) return 1;
// else return 0;
}
return 0;
}
0