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