P1540 机器翻译
1.思路
看到这道题的时候,看标签与队列有关,但不知如何书写代码。
只好借鉴大佬的代码,但代码太简单了,好难理解。
想了5,6分钟才明白。
核心:就是先把数存进去,然后如果出现相同的,则不存进去,因为内存里已经有一个了。
然后如果内存存满了,则重新从0开始将之前的覆盖。
如何不将数存入,可以用一个数进行标记,如果出现了,则重新进入循环,并输入数。
2.源码
#include<stdio.h>
int main(){
int M,N;
scanf("%d %d",&M,&N); //m是内存,n是文章长度
int i,p,q,r=0,W[100],w,n=0;
for(i=0;i<M;i++)W[i]=-1;
for(i=0;i<N;i++){
scanf("%d",&w),q=1;
for(p=0;p<M;p++){//检索
if(w==W[p]){
/*因为 w 存在内存中,查字典的字数不变,
又因为这个数在内存中,则可以不存入 */
q--;break;
}
}
if(q==0)continue;//内存中存在则跳过
else{
W[r]=w;n++;r++;
if(r==M)r=0;//否则进行查找并存储,注意,这里巧妙地实现了先进先出:r来确定目前轮到谁进谁出
}
}
printf("%d",n);
return 0;
}