BÀI 1: Xét hạng Tên chương trình: XETHANG.PAS Vào dịp tổng kết năm học, nhà trường tổ chức khen thưởng cho các học sinh đạt hạng Nhất, Nhì, Ba trong toàn trường với những phần thưởng đặc biệt và muốn biết điểm số có phá kỉ lục điểm của năm học trước hay không. Số học sinh được các lớp đề nghị khen thưởng rất nhiều nên nhà trường cần xét chọn lại. Việc xét hạng theo nguyên tắc: Các học sinh bằng điểm thì đồng hạng và không có thứ hạng kế tiếp. Chẳng hạn: Có 3 học sinh đồng hạng Nhất thì không có học sinh hạng Nhì, hạng Ba. Có 2 học sinh đồng hạng Nhì thì không có học sinh hạng Ba. - Yêu cầu: Cho trước kỉ lục điểm năm học trước là K, số lượng học sinh đề nghị khen thưởng là N, các điểm số tương ứng là: a 1 , a 2 , …, a N . a) Xét xem điểm số của học sinh có phá kỉ lục điểm năm học trước hay không? Nếu phá kỉ lục điểm thì tính số điểm vượt kỉ lục, nếu không phá kỉ lục điểm thì ghi số 0. b) Thống kê số lượng học sinh đạt hạng Nhất, số lượng học sinh đạt hạng Nhì, số lượng học sinh đạt hạng Ba và điểm số tương ứng của thứ hạng đó. - Dữ liệu vào: Từ tệp văn bản XETHANG.INP gồm 2 dòng: + Dòng đầu tiên số nguyên N và số thực K (3≤ N ≤100, 0 <K≤10.0). + Dòng tiếp theo ghi các số thực a 1 , a 2 , …, a N (0<a i ≤10.0, 1≤ i ≤ N). Các số trên một dòng cách nhau một kí tự trắng. - Kết quả: Ghi vào tệp văn bản XETHANG.OUT gồm: + Dòng thứ nhất ghi kết quả của câu a. + Dòng thứ hai ghi số lượng học sinh đạt hạng Nhất và điểm số của hạng Nhất. + Dòng thứ ba ghi số lượng học sinh đạt hạng Nhì và điểm số của hạng Nhì. + Dòng thứ tư ghi số lượng học sinh đạt hạng Ba và điểm số của hạng Ba. Các số trên cùng một dòng cách nhau một kí tự trắng, các điểm số lấy một chữ số thập phân. Ví dụ: Test XETHANG.INP XETHANG.OUT 1 5 9.8 9.6 9.8 9.6 9.8 9.9 0.1 1 9.9 2 9.8 0 2 6 9.9 9.6 9.8 9.6 9.8 9.6 9.5 0 2 9.8 0 3 9.6

1 câu trả lời

const fi='xethang.inp';
      fo='xethang.out';
var n,i,j,t:integer;
    k,c:real;
    a: array [1..100] of integer;
    d:array [1..100]  of byte;
procedure sort;
begin
        for i:=1 to n-1 do
                for j:=i+1 to n do
                        if a[i]>a[j] then
                        begin
                                t:=a[j];
                                a[j]:=a[i];
                                a[i]:=t;
                        end;
end;
begin
        assign(input,fi);
        reset(input);
        readln(n,k);
        for i:=1 to n do
                begin
                        read(c);
                        a[i]:=trunc(c*10);
                end;
        close(input);
        sort;
        for i:=1 to n do inc(d[a[i]]);
        assign(output,fo);
        rewrite(output);
        if a[n]>k then writeln(a[n]/10-k:0:1) else writeln(0);
        writeln(d[a[n]],' ',a[n]/10:0:1);
        if d[a[n]]>1 then writeln(0) else writeln(d[a[n-1]],' ',a[n-1]/10:0:1);
        if d[a[n-d[a[n]]]]>1 then writeln(0) else writeln(d[a[n-d[a[n]]]],' ',a[n-d[a[n]]]/10:0:1);
        close(output);
end.

Câu hỏi trong lớp Xem thêm