机器翻译pascal程序
题意:
把一串数放进一个字典里,如果字典里没有相同的数,就把最先放的那一类数拿出来,把当前的数放进去,再统计一次。
分析
整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:
空:内存初始状态为空。
第一个数时. 1:查找单词1 并调入内存。
第二个数时. 1 2:查找单词2 并调入内存。
第三个数时. 1 2:在内存中找到单词1。
第四个数时. 1 2 5:查找单词5 并调入内存。
第五个数时. 2 5 4:查找单词4 并调入内存替代单词1。
第六个数时. 2 5 4:在内存中找到单词4。
第七个数时. 5 4 1:查找单词1 并调入内存替代单词2。
共计查了5 次词典。
var
m,n,tj,m1,i:longint;
a,t:array[0..1000]of longint;
m2:array[0..100]of longint;
procedure work;
var
i:longint;
begin
for i:=1 to m-1 do
m2[i]:=m2[i+1];
end;
begin
readln(m,n);
tj:=0;m1:=0;
fillchar(t,sizeof(t),0);
for i:=1 to n do
begin
read(a[i]);
if (t[a[i]]=0)and(m1<m) then
begin
inc(tj);
inc(m1);
t[a[i]]:=1;
m2[m1]:=a[i];
end else
if (t[a[i]]=0)and(m1=m) then
begin
inc(tj);
t[m2[1]]:=0;
work;
m2[m]:=a[i];
t[a[i]]:=1;
end;
end;
write(tj);
end.