PASCAL编程题 要求文件输入输出

来源:百度知道 编辑:UC知道 时间:2024/06/14 12:40:41
[问题描述】
一年一度的信息学奥林匹克总结大会准备召开了,但大会负责人Mr.Huang却遇到了麻烦,参加会议的各中小学信息学教练都非常非常忙,因为他们不但担任竞赛的辅导工作,而且还有常规的教学工作,有的还担任学校的行政职务,因此要召集他们都来开会是一件非常困难的事,为了让更多的人来参加会议,时间的选择非常关键,因此Mr.Huang让他们每个人交一份空闲时间表(单位:天),他们也只能在空闲时间才能来开会。Mr.Huang请你通过他们提供的空闲时间表来确定开会的时间(会开1整天)。自然是能来的人越多越好,在这个前提下,请你确定某一天开会,如果能来的人数相同的话,会越早开越好,当然如果与会人数小于组委会设定的最少人数,会议将被取消。
【输入文件】
输入文件meet.in的第一行为两个正整数N,Q(1<=Q<=N<=50),其中N表示信息学教练的总人数,Q表示至少需要多少信息学教参加,使得会议能够召开。
以下每行第一个数表示一个会员空闲的日期Mi,其后Mi个数,每个数表示他空闲的时间(1<=时间,单位:天)<=100)
【输出文件】
输出文件meet.out只一行为一个整数,为开会的最早时间,如果与会人数少于组委会设定的人数Q,会议被取消,则输出"0"。
【输入输出样例】
meet.in
3 2 //3表示总人数,2表示至少需要2人,使得会议才能召开
4 1 5 8 9 //表示第一个人有4天有空,分别是第1天、第5天、第8天、批9天有空闲。
3 2 5 9 //同上
5 2 4 5 7 9 //同上
meet.out
5 //表示会议meet最早在第5天召开。

已阅题(够恶心的)...

算法:直接统计

思路:
开一个1..100的数组f[i]来记录第i天有多少人空闲。
最后只要从1到100循环一遍查找人数最大值就可以了

程序(文件输入输出):

Program ex;
Var
f: array [1..100] of longint;
n, m, i, j, k, t, p: longint;

Begin
assign(input, 'meet.in');
reset(input);
assign(output,'meet.out');
rewrite(output);
fillchar(f, sizeof(f), 0);
readln(n, t);
for i:=1 to n do
begin
read(k);
for j:=1 to k do
begin
read(p);
f[p] := f[p] + 1;
end;
end;
m := 0;
t := 0;
for i:=1 to 100 do
if (f[i] > m) and (f[i] > t) then
begin
m := f[i];
t := i;
end;

writeln(t);
close(input);
close(output);
End.
FreePascal 中调试通过

---------------------
那个改动是有问题的!注意:如果与会人数少于组委会设定的人数Q,会议被取消,则输出"0"。

Program ex;
Var