pascal编程题目,大师解答一下,最好用最简洁的方法,做上批注。

卡片求和
问题描述
可可与小伙伴们玩一种卡片游戏,卡片在桌子上一字排开,共有n张,卡片上都有编号,游戏要求以最快速度,找出相邻的k张卡片,使其编号之和最大。
输入格式
两行。
第1行,2个正整数n和k。
第2行,n个正整数,表示各卡片的编号。
输出格式
1个正整数,表示最大的相邻的k张编号和。。
输入样例
20 4
5 20 1 18 4 16 6 10 15 2 17 3 14 7 13 8 11 19 9 12
输出样例
51
数据范围
K<n<=1000
小明有n张卡片,每张卡片都有一个编号ai(ai>=0),但是这n张卡片中有一些编号是重复的,现在要你把它们按编号从小到大排好,重复的只需要留下一张,但需要统计每种编号的卡片出现的次数,想请你帮忙用编程来解决问题。

第1个回答  推荐于2016-10-12
var
n,k:integer;
a:array[1..1000] of integer;
s:array[1..1000] of longint;
i,j:integer;
max:longint;
begin
readln(n,k);
for i:=1 to n do read(a[i]);
for i:=1 to n do s[i]:=0;
for i:=1 to n-k+1 do for j:=1 to k do s[i]:=s[i]+a[i+j-1];
max:=s[1];
for i:=2 to n-k+1 do if s[i]>max then max:=s[i];
writeln(max);
end.追问

太谢谢您了!我会为你加分的,你可以在位我做一题吗?题目在上边。我的程序如下但不知道为什么效率就是搞不上去,还超时了。
readln(n);
for i:=1 to n do
read(j); inc(a[j]);
for i:=1 to 10000 do
if a[i]0 then writeln(i,' ',a[i]);

算了,不用你做了

追答

你那题的回答就是我做的!

追问

呵呵

本回答被提问者和网友采纳