GIÚP MÌNH VỚI Cho dãy số gồm n số tự nhiên a1, a2, … , an (1 nhỏ hơn bằng i nhỏ hơn bằn n < 1000, a1 <10000). Dãy con của một dãy số là dãy có được

Question

GIÚP MÌNH VỚI
Cho dãy số gồm n số tự nhiên a1, a2, … , an (1 nhỏ hơn bằng i nhỏ hơn bằn n < 1000, a1 <10000). Dãy con của một dãy số là dãy có được sau khi loại bớt một số phần tử, các phần tử khác giữ nguyên vị trí. Yêu cầu: Cho số tự nhiên m <10000, hãy cho biết một dãy con của dãy a có tổng bằng m chứa ít phần tử nhất. Dữ liệu vào từ file: DAYCON.INP - Dòng 1: Chứa hai số n, m - Dòng 2: Chứa n số a1, a2, ... , an theo đúng thứ tự đó. Kết quả ghi ra file: DAYCON.OUT - Dòng 1: Ghi số k là số phần tử của dãy con chọn ra được, nếu không tồn tại dãy con có tổng bằng m thì ghi số -1. - Nếu có phương án chọn dãy con, thi dòng 2 ghi chỉ số của k phần tử được chọn (ghi theo thứ tự của phần tử trong dãy). Các số trên một dòng của file dữ liệu vào và file ghi kết quả được ghi cách nhau ít nhất một dấu cách.

in progress 0
RI SƠ 10 months 2020-11-13T19:54:18+00:00 3 Answers 32 views 0

Answers ( )

    0
    2020-11-13T19:56:12+00:00

    const  fi=’daycon.inp’;
           fo=’daycon.out’;
           maxn=round(1e5)+5;
    var     n,s,i,j,sum,k,dem,tong:longint;
            a,dem: array [1..maxn] of longint;
    procedure nhap;
    var i:longint;
    begin
            assign(input,fi);
            reset(input);
            readln(n,m);
            for i:=1 to n do
            readln(a[i]);
            close(input);
    end;
    type
         tlist = array[1..max] of longint;
    procedure qsortAB(var a,b : tlist);
        procedure sort(l,r: longint);
          var
             i,j,x,y: longint;
          begin
             i:=l;
             j:=r;
             x:=a[(l+r) div 2];
             while(i<=j) do
               begin
                    while a[i]<x do
                        inc(i);
                    while x<a[j] do
                        dec(j);
                    if not(i>j) then
                        begin
                            y:=a[i]; a[i]:=a[j]; a[j]:=y;
                            y:=b[i]; b[i]:=b[j]; b[j]:=y;
                            inc(i);
                            j:=j-1;
                        end;
                end;
             if l<j then
               sort(l,j);
             if i<r then
               sort(i,r);
          end;

        begin
           sort(1,max);
        end;

    procedure xuly;
    var c:longint;
    begin

                                for i:=1 to n do
                            begin
                                    sum:=i;
                                    for j := i+1 to n-1 do
                                            begin
                                                    if (sum<m) then sum:=sum+a[j]
                                                    else if (sum>m) then begin sum :=0; break; end
                                                    else if (sum = m) then begin k:=k+1; a[k]:=a[j];  break; end;
                                            end;
                            end;
    end;
    procedure xuat;
    begin
            assign(output,fo);
            rewrite(output);
            if k=0 then write(-1);

            for i:=1 to k do
                    begin
                            tong:=0;
                            while tong<m do
                                    begin
                                            dec(a[i]);
                                            tong:=tong+a[i];

                                            inc(dem);
                                    end;
                    end;

            write(dem);
            close(output);
    end;
    begin
            nhap;
            xuly;
            xuat;
    end.

    0
    2020-11-13T19:56:18+00:00

    boss education you of whiet

    0
    2020-11-13T19:56:27+00:00

    Để tìm câu trả lời chính xác các em hãy tham khảo dãy con có tổng bằng s các nguồn hoc24.vn, lazi.vn, hoidap247.com để thầy cô và các chuyên gia hỗ trợ các em nhé!

Leave an answer

Browse

Giải phương trình 1 ẩn: x + 2 - 2(x + 1) = -x . Hỏi x = ? ( )