Trang chủ Tin Học Lớp 8 Cho dãy số tự nhiên a(1), a(2), a(3),...,a(n). Tìm cách...

Cho dãy số tự nhiên a(1), a(2), a(3),...,a(n). Tìm cách chia dãy số trên thành nhiều đoạn nhất sao cho mỗi đoạn có tổng bằng nhau. Nhập vào:-Dòng đầu tiên ghi

Câu hỏi :

Cho dãy số tự nhiên a(1), a(2), a(3),...,a(n). Tìm cách chia dãy số trên thành nhiều đoạn nhất sao cho mỗi đoạn có tổng bằng nhau. Nhập vào:-Dòng đầu tiên ghi số n (là số phần tử của dãy) -Các dòng còn lại ghi các số a(1), a(2), a(3),...,a(n). Các số trên cùng dòng cách nhau một khoảng. In ra:số đoạn nhiều nhất vd: n=4 a=3 3 3 3 ->4 n=6 a=1 2 3 1 2 3 ->4

Lời giải 1 :

Nếu có sai thì bạn nói nhé.

=========================

program Hello;
uses crt;
var a:array[1..1000] of Longint; {khai báo mảng}
    n,j,s,i,tong:Longint; {khai báo kiều dữ liệu}
begin

    clrscr; {xóa màn hình cho dễ nhìn}
    write('n = ');
    readln(n);   {nhập n}
    write('a = ');
    for i:=1 to n do  {nhập phần tử của mảng}
        begin
            read(a[i]);    {nhập phần tử thứ a[i]}
            s:=s+a[i];    {tính tổng tất cả các số}
        end;
    for j:= n downto 1 do      {tìm số đoạn nhiều nhất nên đi ngược xuống}

        if s mod j = 0 then   {không có cũng được}
            begin
                tong:=0;    {gán tổng bằng 0 khi bắt đầu tính}
                for i:=1 to n do 
                    begin
                        tong:=tong+a[i];   {tính tổng các đoạn nhỏ}
                        if tong= s div j then tong:=0;  {tổng các đoạn nhỏ bằng với tổng tất cả chia cho số đoạn thì dừng vòng lặp ngoài bằng cách gán tổng bằng 0}
                    end;
                if tong=0 then Break; {vòng lặp ngoài dừng khi tổng bằng 0}
            end;
    write('-> ',j); {in số đoạn nhiều nhất là j, vì còng lặp ngoài có biến đếm là j}
end.

=================================

Ý tưởng:

xét trường hợp: 1 2 3 1 2 3

ta thấy tổng chúng là 12.

Số đoạn nhiều nhất (nhẫm) là 4 (1 2 | 3 | 1 2 | 3)

Tổng các đoạn là 3. Và 12 chia cho 4 đoạn thì bằng 3.

Nên ta có số đoạn bằng: Tổng tất cả các số, chia cho tổng các số đoạn nhỏ. 

Thảo luận

-- ukm
-- à mà bạn có fb hoặc zalo j ko,để mk dễ hỏi bài
-- À có
-- ukm,nói mk vs
-- Để mình tìm cái số điện thoại cái
-- Quên đăng ký số mấy rồi
-- kb vs mk cug đc
-- Rồi đấy bạn

Lời giải 2 :

uses crt;
var a:array[1..100000000] of longword;
    sum,t,s:qword;
    i,n,j:longword;
begin
    clrscr;
    write('n=');readln(n);
    write('a=');
    sum:=0;
    for i:=1 to n do
      begin
          read(a[i]);
          sum:=sum+a[i];
      end;
    s:=0;
    for i:=1 to n do
      begin
          s:=s+a[i];
          if sum mod s=0 then
            begin
                t:=0;
                for j:=i+1 to n do
                   begin
                      t:=t+a[j];
                      if t=s then
                        t:=0;
                      if t>s then break;
                   end;
                if t=0 then
                  begin
                      writeln(sum div s);
                      break;
                  end;
            end;
      end;
readln;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