Trang chủ Tin Học Lớp 8 cho 1 dãy n số nguyên có giá trị lần...

cho 1 dãy n số nguyên có giá trị lần lượt là a1,a2,...,an. Có k lần đổi dấu một số bất kỳ trong dãy từ âm sang dương và ngược lại. Yêu cầu : Tính tổng lớn nhất

Câu hỏi :

cho 1 dãy n số nguyên có giá trị lần lượt là a1,a2,...,an. Có k lần đổi dấu một số bất kỳ trong dãy từ âm sang dương và ngược lại. Yêu cầu : Tính tổng lớn nhất có thể của dãy số sau khi thực hiện đổi dấu . Dữ liệu vào: tệp TONGMAX.INP có cấu trúc như sau: - Dòng đầu ghi 2 số nguyên dương n và k( 1

Lời giải 1 :

uses crt;
var i, n, k, m, x: longint;
    res: int64;
    a: array[0..100000] of longint;

function incr(var a: longint): longint; begin inc(a); exit(a); end;

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
    clrscr;
    readln(n, k);
    
    for i:=1 to n do begin
        read(x); if x >= 0 then inc(res, x) else a[incr(m)]:=x;
    end;
    
    sort(1, m);
    for i:=1 to m do begin
        if k > 0 then begin dec(k); a[i]:=-a[i]; end;
        inc(res, a[i]);
    end;
    
    writeln(res);
readln;
end.

Thảo luận

-- nếu số nhập vào (x) >= 0 thì đưa vào tính tổng (x) < 0 thì đưa vào mảng (để sắp xếp và đảo dấu ở phần dưới)
-- và mảng này sẽ có m phần tử :)
-- https://hoidap247.com/cau-hoi/3688601 helpp gthich với lun ;-;
-- https://hoidap247.com/cau-hoi/3688601 helppp đi mà ;-;
-- https://hoidap247.com/cau-hoi/3728461 helpppppppp
-- https://hoidap247.com/cau-hoi/3728461
-- https://hoidap247.com/cau-hoi/3745319 HELPPPP
-- https://hoidap247.com/cau-hoi/3891851 giúp với bạn ớii

Lời giải 2 :

uses crt;
var f1, f2 : text;
    A, B : array [1 .. 10000] of longint;
    S : int64;
    i, j, n, k : longint;

begin
clrscr;
assign(f1, 'TONGMAX.INP'); reset(f1);
assign(f2, 'TONGMAX.OUT'); rewrite(f2);
readln(f1, n, k);

j := 0; S := 0;
for i := 1 to n do
    begin
        read(f1, A[i]);
        if A[i] < 0 then
            begin
                inc(j);
                B[j] := A[i];
            end;
        S := S + A[i];
    end;

n := j;
for j := n downto 2 do 
    for i := 1 to j - 1 do
        if B[i] > B[i + 1] then 
            begin
                B[i] := B[i] + B[i + 1];
                B[i + 1] := B[i] - B[i + 1];
                B[i] := B[i] - B[i + 1] ;
            end;

for i := 1 to k do S := S + 2 * Abs(B[i]);

write(f2, S);

close(f1); close(f2);
readln
end.

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK