Announcement

Collapse
No announcement yet.

Phân tích số N thành tổng của các số tự nhiên liên tiếp,liệt kê tất cả các cách có th

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 07520004
    replied
    Originally posted by 11520126 View Post
    Chạy được tới 10^8 à. @@!
    Còn cái chỗ thời gian chạy test thử chưa em. 1s chạy đủ không

    Originally posted by 07520352 View Post
    a + (a + 1) + (a + 2) + ... + (a + b)
    = (b + 1) * a + (1 + 2 + ... + b)
    = (b + 1) * a + b * (b + 1) / 2
    = (b + 1) * (a + b/2)
    Chuyển N từ vế trái qua thành một phương trình bậc nhất theo b, ẩn là a.
    Cho vòng for a chạy tới N rồi tính b, b là số thì quất ra, chắc là nhanh hơn nhỉ

    Leave a comment:


  • 11520126
    replied
    Originally posted by 07520004 View Post
    Thử với cái giới hạn trên kia chưa
    Chạy được tới 10^8 à. @@!

    Leave a comment:


  • 08520001
    replied
    Hi. Mình nghĩ giải với độ phức tạp O(căn N) là ok rồi ah. do lot nam.
    Last edited by 08520001; 18-04-2015, 23:31.

    Leave a comment:


  • 07520004
    replied
    Originally posted by 08520001 View Post
    Mình đề nghị bài này giới hạn N <= 10^9 và thời gian là 1s. Mình nghĩ vậy sẽ khoa học hơn
    Originally posted by 11520126 View Post
    Thanks chị, giờ em mới hiểu bài này, em có cái đáp án mà ghi công thức gì á, ngẫm hoài ko hiểu, cách này có vẻ dễ hiểu hơn.
    Code:
    uses crt;
    var n:longint; a,
    i,m,dem,max:integer;
    
    begin
    clrscr;
    Write('Nhap N = ');readln(n);
    max:=trunc(sqrt(N*8+1)+1) div 2;
    dem:=0;
    For i:=2 to max-1 do
    
     If ((N-i*(i-1)div 2) mod i = 0) then
      begin
      A:=(N-i*(i-1)div 2) div i;
      inc(dem);
      Writeln('Cach thu ',dem);
      For m:=a to a+i-1 do
       write(' ',m);
       writeln;
      end;
    
    
    readln;
    end.
    Thử với cái giới hạn trên kia chưa

    Leave a comment:


  • 11520126
    replied
    Originally posted by 08520604 View Post
    =)) chào chị Thương
    Hở ???? em nhầm chỗ nào hả ????

    Leave a comment:


  • 08520604
    replied
    Originally posted by 11520126 View Post
    Thanks chị, giờ em mới hiểu bài này, em có cái đáp án mà ghi công thức gì á, ngẫm hoài ko hiểu, cách này có vẻ dễ hiểu hơn.
    =)) chào chị Thương

    Leave a comment:


  • 11520126
    replied
    Originally posted by 07520352 View Post
    a + (a + 1) + (a + 2) + ... + (a + b)
    = (b + 1) * a + (1 + 2 + ... + b)
    = (b + 1) * a + b * (b + 1) / 2
    = (b + 1) * (a + b/2)

    Cho 2 vòng for, 1 chạy a, 1 chạy b, nếu tích trên bằng n thì xuất ra dãy số từ a đến a + b.

    Ví dụ, với n = 9 thì có 2 trường hợp:
    a = 2, b = 2
    hoặc
    a = 4, b = 1
    Thanks anh, giờ em mới hiểu bài này, em có cái đáp án mà ghi công thức gì á, ngẫm hoài ko hiểu, cách này có vẻ dễ hiểu hơn.
    Code:
    uses crt;
    var n:longint; a,
    i,m,dem,max:integer;
    
    begin
    clrscr;
    Write('Nhap N = ');readln(n);
    max:=trunc(sqrt(N*8+1)+1) div 2;
    dem:=0;
    For i:=2 to max-1 do
    
     If ((N-i*(i-1)div 2) mod i = 0) then
      begin
      A:=(N-i*(i-1)div 2) div i;
      inc(dem);
      Writeln('Cach thu ',dem);
      For m:=a to a+i-1 do
       write(' ',m);
       writeln;
      end;
    
    
    readln;
    end.
    Last edited by 11520126; 25-10-2011, 21:13. Reason: sr, em nhầm giới tính của anh Thương ^^!

    Leave a comment:


  • 08520500
    replied
    Xin phép post một đề cho các bạn tham khảo :
    Cho số nguyên dương N. Hãy cho biết có thể phân tích N thành tổng các số tự nhiên liên tiếp hay không? Nếu có hãy phân tích N thành tổng của các số tự nhiên liên tiếp với nhiều số hạng nhất có thể được.
    Dữ liệu vào: cho trong File PTICH.INP gồm một số dòng, mỗi dòng ghi một số nguyên dương N (N <= 10^9)
    Kết quả: ghi ra file PTICH.OUT theo cấu trúc sau:
    + Nếu N phân tích được thành tổng các số tự nhiên liên tiếp thì ghi chữ d sau đó là các số hạng trong cách phân tích đó, các số hạng ghi cách nhau một dấu cách, mỗi dòng ghi không quá 25 số.
    + Nếu N không phân tích được thì chỉ ghi chữ k.
    Ví dụ:

    PTICH.INP
    12
    8
    PTICH.OUT
    d: 3 4 5
    k

    Leave a comment:


  • 08520500
    replied
    Đồng ý với bạn An.

    Leave a comment:


  • 08520001
    replied
    Mình đề nghị bài này giới hạn N <= 10^9 và thời gian là 1s. Mình nghĩ vậy sẽ khoa học hơn quan ao nam
    Last edited by 08520001; 18-04-2015, 23:18.

    Leave a comment:


  • 07520352
    replied
    a + (a + 1) + (a + 2) + ... + (a + b)
    = (b + 1) * a + (1 + 2 + ... + b)
    = (b + 1) * a + b * (b + 1) / 2
    = (b + 1) * (a + b/2)

    Cho 2 vòng for, 1 chạy a, 1 chạy b, nếu tích trên bằng n thì xuất ra dãy số từ a đến a + b.

    Ví dụ, với n = 9 thì có 2 trường hợp:
    a = 2, b = 2
    hoặc
    a = 4, b = 1

    Leave a comment:


  • 08520001
    replied
    Hi. Thường thì mỗi đề đều phải có giới hạn. Vì tùy vào giới hạn của đề mà có thuật toán tương ứng để giải hết giới hạn đó. Nếu ko ghi giới hạn thì giống như đề chưa hoàn chỉnh vậy ah. Anh có lập các topic, em có thể nghiên cứu thử xem quan ao tre em
    Last edited by 08520001; 18-04-2015, 23:18.

    Leave a comment:


  • 07520004
    replied
    Originally posted by 11520126 View Post
    thì anh cứ nhập đại thui, làm vui thui mà, có phải thi Olympic đâu anh @@!
    Thì thằng Cao Văn An nó hỏi mà em không hiểu nên anh hỏi lại giùm nó thôi. Chứ anh chả quan tâm, anh làm được tới số mấy anh làm đề quy định kệ nó =))

    Leave a comment:


  • 11520126
    replied
    thì anh cứ nhập đại thui, làm vui thui mà, có phải thi Olympic đâu anh @@!

    Leave a comment:


  • 07520004
    replied
    Originally posted by 11520126 View Post
    N nhập từ bàn phím anh à. Time ko giới hạn. Ủa mà sao ra topic riêng rùi ??
    Admin hay mod move ra chứ còn sao nữa. Mà N nhập từ bàn phím là nhập số có giá trị bao nhiêu? Anh cứ đè phím số 9 trên bàn phím trong vòng 7 nốt nhạc là nó ra cũng khủng lắm đó.

    Leave a comment:

LHQC

Collapse
Working...
X