10.05.2017

Xếp hàng

(HSG Quảng Trị 08 - 09). Lớp 9A có N bạn học sinh (n<=50), mỗi bạn được gắn với một mã số bất kì. Trong buổi đồng diễn thể dục N bạn được xếp thành một hàng dọc theo thứ tự từ nhỏ đến lớn của mã số. Để đội hình toàn trường cân đối thầy giáo chuyển một  bạn lớp khác vào vị trí trong hàng có mã số là K vào đội hình lớp 9A. Em hãy giúp thầy giáo xếp bạn có mã số K vào vị trí trong hàng sao cho không làm xáo trộn đội hình đã được sắp xếp mà vẫn đảm bảo nguyên tắc xếp hàng đã nói trên. Hãy viết chương trình để thực hiện công việc đó.
Dữ liệu vào: cho file text XEPHANG.INP có 2 dòng, trong đó:
    - Dòng đầu :ghi hai số N và K
    - Dòng thứ hai ghi các mã số của mỗi học sinh viết cách nhau ít nhất một dấu cách.
Kết quả ra: ghi ra file text XEPHANG.OUT gồm hai dòng
    - Dòng một: ghi vị trí xếp bạn mã số K vào hàng
    - Dòng hai: hàng được xếp
Ví dụ:
     Xephang.inp
        7 3
        2 4 5 7 8 9 12
     Xephang.out
        2
        2 3 4 5 7 8 9 12
                                              Lời giải tham khảo
const
      fi='xephang.inp';
      fo='xephang.out';
 var
    f,f1: text;
    i,n,k,j,h: integer;
    a: array [1..51] of integer;
 begin
      assign(f,fi);
      reset(f);
               read(f,n);
               readln(f,k);
               for i:= 1 to n do read(f,a[i]);
      close(f);
      for i:=1 to n do
          begin
               if a[i]<k then
                  if a[i+1]>k then
                     begin
                          assign(f,fo);
                          rewrite(f);
                                      writeln(f,i+1);
                                     for j:=1 to i do write(f,a[j],' ');
                                      write(f,k,' ');
                                      for j:=i+1 to n do write(f,a[j],' ');
                          close(f);
                     end;
          end;
       if k>a[n] then
                   begin
                        a[n+1]:=k;
                        assign(f1,fo);
                        rewrite(f1);
                                   writeln(f,n+1);
                                   for i:= 1 to n+1 do write(f1,a[j],' ');
                        close(f1);
                   end;
 end.

No comments:

Post a Comment

Cảm ơn bạn đã nhận xét