数据中单词有可能是0,而你的程序 f 数组初值为0,也就是说默认内存中全是0.
当数据中的0第一次出现时,就会认为已在内存中而不会去查字典.
例如数据:
10 1
0
正确输出是1,而你的输出为0.
解决方法:
将 f 数组赋初值为-1.(数据中无负数,不必担心错误)
一开始加一句 for i:=1 to m do f[i]=-1;
修改后的程序:
var q,m,n,i,j,k,c:longint;
f:array[1..1000] of longint;
a:array[1..10000] of longint;
begin
readln(m,n);
for i:=1 to m do f[i]=-1;
for i:=1 to n do
read(a[i]);
for i:= 1 to n do
begin
for j:= 1 to m do
if f[j]=a[i] then begin q:=0; break end else q:=1;
if q=1 then begin k:=(k mod m)+1; f[k]:=a[i]; inc(c);
end;
end;
writeln(c);
end.