Trang chủ Tin Học Lớp 8 các bạn ơi giúp mk vs !!!!!!!! Bài 2. Phân...

các bạn ơi giúp mk vs !!!!!!!! Bài 2. Phân tích số (5 điểm) Lần trước Tom đã giải được bài toán: “Tìm cách khai triển số tự nhiên N thành tổng các số tự nhiên

Câu hỏi :

các bạn ơi giúp mk vs !!!!!!!! Bài 2. Phân tích số (5 điểm) Lần trước Tom đã giải được bài toán: “Tìm cách khai triển số tự nhiên N thành tổng các số tự nhiên khác nhau sao cho tích của chúng lớn nhất”. Lần này, Tom gặp bài toán cũng liên quan đến phân tích số tự nhiên, với nội dung như sau: Cho trước số tự nhiên N (N≤ 103). Tính số cách phân tích N thành tổng của ba số tự nhiên khác nhau và liệt kê các số tự nhiên đó. Em hãy giúp Tom giải bài toán trên. Yêu cầu: Gọi Q là số cách phân tích số N thành tổng của ba số tự nhiên khác nhau. Tính số cách Q và liệt kê các số tự nhiên đó. Nếu không phân tích được thì ghi -1. Dữ liệu vào: File văn bản PTICH.INP gồm một số N. Dữ liệu ra: Ghi ra file văn bản PTICH.OUT - Nếu phân tích được thì: + Dòng đầu ghi số Q; + Dòng thứ hai trở đi liệt kê các số theo từng cách (mỗi số cách nhau ít nhất một dấu cách). - Nếu không phân tích được thì ghi -1. Ví dụ: PTICH.INP 8 PTICH.OUT 1 2 5 1 3 4 Giải thích Có 2 cách phân tích 8=1+2+5 8=1+3+4 Ghi chú: Gọi i, j và k là ba số tự nhiên có tổng đúng bằng N, với i<j<k; 0< i, j, k <103. Ràng buộc: • Có 50% số test ứng với 50% số điểm có 0<N≤ 102; • Có 50% số test còn lại ứng với 50% số điểm có 102< N≤ 103.

Lời giải 1 :

uses crt;
var f:text; b,c:array[0..104]of longint; n:longint;
procedure print;
var i:longint;
begin
   if c[3]=n then
      begin 
         for i:=1 to 3 do write(f,b[i],' ');
         writeln(f);
      end;
end;
function dequy(a:longint):longint;
var i:longint;
begin
   if a=4 then print else
      for i:=b[a-1]+1 to n-c[a-1] Do
         begin
            b[a]:=i;
            c[a]:=c[a-1]+b[a];
            dequy(a+1);
         end;
end;
begin
clrscr;
   assign(f,'PTICH.INP');reset(f);
      readln(f,n);
      b[0]:=0;
      c[0]:=0;
   close(f);
   assign(f,'PTICH.OUT');rewrite(f);
      dequy(1);
   close(f); 
end.

Thảo luận

-- Cái này khó giải thích lắm
-- Bạn lên gg gõ đệ quy là sẽ rõ
-- bn còn cách nào khac ko bn ơi
-- Có, nma cách này dễ nhất rồi, mấy cách kia sinh trường hợp cần có công thức (gg)
-- bn giảng mk cái dòng ni vs bn ơi: if a=4 then print else for i:=b[a-1]+1 to n-c[a-1] Do begin b[a]:=i; c[a]:=c[a-1]+b[a]; dequy(a+1);
-- mk xin bn lun á
-- mk xin info bn vs
-- mk hỏi cho tiện

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 :))

Copyright © 2021 HOCTAP247