Xét một dãy gồm n số nguyên a1, a2, a3, ... an. Hãy sắp xếp dãy theo chiều giảm dần. Nhập một số nguyên từ bàn phím sau đó chèn vào dãy sao cho dãy vẫn có thứ tự giảm dần (không được xếp lại dãy). Dữ liệu vào: Từ bàn phím gồm ba dòng: - Dòng 1: Chứa số nguyên dương n (n ≤ 106). - Dòng 2: Chứa n số nguyên a1, a2,…, an (ai ≤ 106). - Dòng 3: Chứa một số nguyên được nhập từ bàn phím Dữ liệu ra: - Dòng 1: Dãy sau khi sắp xếp giảm dần. - Dòng 2: Dãy sau khi chèn vẫn có thứ tự giảm dần.

2 câu trả lời

program bai3;
uses crt;
var
   i,n,j,tg,x:integer;
   a:array[1..106] of integer;
BEGIN
   clrscr;
   write('n=');readln(n);
   while (n<0) or (n>106) do
        begin
         write('nhap lai n=');readln(n);
       end;
   writeln('nhap day so:');
   for i:=1 to n do
        begin
         write('a[',i,']=');readln(a[i]);
        end;
   for i:=1 to n-1 do
        for j:=i+1 to n do
            if a[i]<a[j] then
                begin
                   tg:=a[i];
                a[i]:=a[j];
                a[j]:=tg;
             end;
       writeln('day so vua sap xep giam dan la:');
      for i:=1 to n do write(a[i],' ');
    Writeln;
    Write('Nhap vao so x: '); Readln(x);
    i:=1;
    While (x>a[i]) and (i<=n) do i:=i+1;
      For j:=n+1 downto i do
           a[j]:=a[j-1];
           a[i]:=x;
      Writeln('Mang sau khi chen x la: ');
      For i:=1 to n+1 do
          Write(a[i],' ');
      Readln;
END.

Xác định bài toán:

Input: Dãy n số

Output: Sắp giảm dần của dãy số

Chỉ ra tính dừng của thuật toán

-Bước 1: Nhập n và nhập dãy số

-Bước 2: i←1;

-Bước 3: Nếu a[i]<a[i+1] thì đổi chỗ a[i] và a[i+1]

-Bước 4: i←i+1;

-Bước 5: Nếu i≤n thì quay lại bước 3

-Bước 6: Xuất dãy

-Bước 7: Kết thúc

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