Nam có n viên gạch được đánh số từ 1 đến n. Các viên gạch có độ cứng lần lượt là a1,a2,...,an. Một viên gạch có độ cứng x nghĩa là Nam có thể chồng lên trên viên gạch đó tối đa x viên gạch khác, nếu chồng nhiều hơn thì viên gạch đó bị vỡ. Hỏi Nam có thể sắp được chồng gạch cao nhất là bao nhiêu? Dữ liệu vào: Dòng đầu tiên là số nguyên n (1≤ n ≤100) là số viên gạch. Dòng tiếp theo gồm n số nguyên a1,a2,,...,an (0≤ ai ≤100) mỗi số cách nhau một khoảng trắng. Dữ liệu xuất: Là số nguyên xác định chiều cao cao nhất của chồng gạch mà Nam sắp được. Ví dụ: CHONGGACH.INP CHONGGACH.OUT 3 3 1 2 1
2 câu trả lời
var
n, i, d, j, tmp: integer;
a: array[1..100005] of integer;
begin
read(n);
for i := 1 to n do read(a[i]);
for i := 1 to n-1 do
for j := i + 1 to n do
if a[i] > a[j] then
begin
tmp := a[i];
a[i] := a[j];
a[j] := tmp;
end;
d := 0;
for i := 1 to n do
if d <= a[i] then
d := d + 1;
writeln(d);
end.
var i, n, res: longint;
a: array[0..100] of longint;
procedure sort(l, r: longint);
var i, j, x, t: longint;
begin
i:=l; j:=r; x:=a[(l + r) shr 1];
repeat
while a[i] > x do inc(i);
while a[j] < x do dec(j);
if i <= j then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i > j;
if i < r then sort(i, r);
if l < j then sort(l, j);
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
sort(1, n); // *Giảm dần*
i:=2; res:=a[1] + 1;
while (i <= n) and (i <= res) do begin
if a[i] + i < res then res:=a[i] + i;
inc(i);
end;
if res > n then write(n) else write(res);
end.