cho mảng A gồm n phần tử nguyên dương (n<=10^5, A(i)<=10^6) -nhập ngẫu nhiên mảng A 1. Tìm kiếm 3 phần tử lớn nhất trong mảng A 2. Tìm kiếm 100 phần tử nhỏ nhất trong mảng A 3. Tìm kiếm 10000 phần tử nhỏ nhất A 4. Sắp xếp tăng dần A 5. Tìm đoạn liên tục có tổng nhỏ hơn 10000 dài nhất ai giúp mk với đag cần gấp ;))

1 câu trả lời

uses crt;
var n,i,j,vt,m,t,tong,da,cu:longint; a,b,c,d,e:array[1..100000]of longint;
begin
clrscr;
   write('n=');readln(n);
   for i:=1 to n do
      begin
         write('a[',i,']=');readln(a[i]);
         b[i]:=a[i]; c[i]:=a[i]; d[i]:=a[i]; e[i]:=a[i]
      end;
   writeln('Cau 1:');
   for i:=1 to 3 do
       begin
           vt:=1;
           for j:=1 to n do if a[j]>a[vt] then vt:=j;
           writeln(a[vt]); a[vt]:=low(longint);
       end;
   writeln('Cau 2:');
   m:=n;
   if m>100 then m:=100;
   for i:=1 to m do
      begin
         vt:=1;
         for j:=1 to n do if b[j]<b[vt] then vt:=j;
         writeln(b[vt]); b[vt]:=high(longint);
      end;
   writeln('Cau 3:');
   m:=n;
   if m>10000 then m:=10000;
   for i:=1 to m do
      begin
         vt:=1;
         for j:=1 to n do if c[j]<c[vt] then vt:=j;
         writeln(c[vt]); c[vt]:=high(longint);
      end;
   writeln('Cau 4:');
   for i:=1 to n do
      for j:=i to n do
         if d[i]>d[j] then
            begin t:=d[i]; d[i]:=d[j]; d[j]:=t; end;
      for i:=1 to n do write(d[i],' '); writeln;
   writeln('Cau 5:');
   for i:=1 to n do
      begin
         j:=i-1;
         tong:=0;
         repeat
            inc(j);
            inc(tong,e[j]);
         until (tong>10000)or(j=n);
         if tong>=10000 then begin tong:=tong-e[j]; dec(j); end;
         if (j-i+1>cu-da+1)and(tong<10000) then begin cu:=j; da:=i; end;
      end;
   writeln(da,'=> ',cu);
readln
end.

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