Trang chủ Tin Học Lớp 8 Để chuẩn bị cho kỳ học sinh giỏi môn Tin học cấp Tỉnh năm học 2020 2021, bạn Long đăng...
Câu hỏi :

Để chuẩn bị cho kỳ học sinh giỏi môn Tin học cấp Tỉnh năm học 2020 2021, bạn Long đăng ký tham gia luyện tập lập trình trên một trang Web online. Mỗi ngày trang Web đều tổ chức một cuộc thi và chấm điểm trực tuyến ngay sau khi kết thúc thời gian làm bài. Vì bài thi dựa vào nhiều yếu tố nên điểm số bài thi có thể là một số âm. Hiện tại, bạn Long đã thi được n ngày, mỗi ngày bạn Long đều nghiêm túc làm bài với kết quả ngày thứ i bạn Long đạt được ai. Theo kinh nghiệm để có thể đạt giải cao trong kỳ thi học sinh giỏi thì mỗi ngày đều phải tham gia kỳ thi trực tuyến sao cho tổng số điểm tối thiểu là k trong số ngày liên tiếp càng ít thì khả năng đạt giải càng cao. Yêu cầu: Hãy tìm số ngày liên tiếp ít nhất (có thể một ngày) trong số n ngày mà bạn Long đã tham gia kỳ thi trực tuyến sao cho tổng số điểm đạt được trong những ngày tối thiểu là k. Dữ liệu vào: cho tệp LUYENTAP.INP gồm 2 dòng - Dòng 1: ghi 2 số : n, k (1N50000; 0<k109) - Dòng 2: ghi n số nguyên a1,a2,..,a n (-106<=ai<=106, i=1,..,n). Các số trên cùng một dòng ghi cách nhau một dấu cách. Dữ liệu ra: cho tệp LUYENTAP.OUT gồm một dòng duy nhất một số nguyên là số ngày liên tiếp ít nhất mà tổng số điểm đạt được tối thiểu là k. Nếu không có số ngày liên tiếp nào mà đạt tổng điểm tối thiểu là k thì ghi ra số là -1 Ví dụ: VD1: Vào: 6 10 3 -4 5 7 1 4 Ra: 2 VD2: Vào: 5 15 2 3 -1 6 4 Ra: -1 Giải bằng Code Pascal với ạ.

Lời giải 1 :

Gửi bạn,

var n,k,i,r,u,v,tong : longint;
    a: array[1..100] of longint;
begin
read(n,k);
for i:= 1 to n do begin
    read(a[i]);
    if a[i]>=k then begin
                write(1);
                exit;
                end;
            end;
tong:=0;
r:=0;
u:=0;
v:=u+r;
while r<(k-1) do begin
     r:=r+1;
     u:=0;
     v:=u+r;
     if r>n then begin
            write(-1);
            exit;
              end;
while v<>n do begin
        u:=u+1;
        v:=v+1;
        tong:=0;
    for i:=u to v do 
        tong:=tong+a[i];
    if tong>=k then begin 
            writeln(r+1);
            exit;
                    end; 
            end;
               end;
    writeln(-1);
end.

Lời giải 2 :

program LUYENTAP;

var
  n, k, i, j, sum, minLength, tempLength: integer;
  arr: array[1..50000] of integer;

function Min(a, b: integer): integer;
begin
  if a < b then
    Min := a
  else
    Min := b;
end;

begin
  assign(input, 'LUYENTAP.INP');
  reset(input);
  assign(output, 'LUYENTAP.OUT');
  rewrite(output);

  readln(n, k);
  for i := 1 to n do
    read(arr[i]);

  minLength := n + 1;
  sum := 0;
  i := 1;
  for j := 1 to n do
  begin
    sum := sum + arr[j];
    while sum >= k do
    begin
      tempLength := j - i + 1;
      if tempLength < minLength then
        minLength := tempLength;
      sum := sum - arr[i];
      i := i + 1;
    end;
  end;

  if minLength = n + 1 then
    writeln(-1)
  else
    writeln(minLength);

  close(input);
  close(output);
end.

Bạn có biết?

Tin học 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. 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. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 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 và sang năm lại là năm cuối cấp, áp lực lớn dần. Hãy chú ý đến sức khỏe, cân bằng giữa học và nghỉ ngơi để đạt hiệu quả tốt nhất!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK