Trang 3 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối
Kết quả 21 đến 30 của 39
  1. #21
    Ngày tham gia
    Apr 2016
    Bài viết
    0
    Trích dẫn Gửi bởi khaimy123
    Đây là nguyên văn bài thi
    Tổng các chữ số
    Cho số nguyên dương n. VIết các số nguyên liên tiếp từ 1 tới n trong hệ thập phân để tạo ra một dãy các chữ số. Hãy tính tổng các chữ số của dãy.

    Ví dụ : với n = 12, ta có dãy chữ số 123456789101112 với tổng là 51.

    test 1 : n = 12
    test 2 : n = 123
    test 3 : n = 2468
    test 4 : n = 13579
    test 5 : n = 12481632
    test 6 : n = 123456789
    test 7 : n = 9876543210
    test 8 : n = 123123123123
    test 9 : n = 123456789123456789
    test 10: n = 98765432100123456789
    test 10 đến 20 chữ số. Nếu viết từ 1->98765432100123456789 thì sao đủ?
    Híc [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
    Bạn không hiểu ý tớ thì phải
    In ra như vậy đâu nhất thiết phải in ra chuỗi có chứa bấy nhiêu chữ số, ta chỉ cần dùng thủ thuật đơn giản sau đây:
    Mã:
    for i:=1 to n do
         write(f,i);
    Số N ở đây có ý nghĩa giống như N của bạn trong đề bài. Dùng ansistring là bởi lẽ, khi tính tổng chữ số của 1 dãy số nào đó mà nó vượt cả int64, thì ta chuyển qua dùng phương pháp xử lý số lớn bằng cấu trúc mảng hoặc chuỗi. Theo đề bạn đưa ra thì không cần dùng đến ansistring, chỉ cần dùng đến string. Vì riêng string đã chứa đến số N có 255 chữ số rồi.

  2. #22
    Ngày tham gia
    Nov 2015
    Bài viết
    4
    Lúc đầu em cũng nghĩ đến cách in:

    for i:=1 to n do
    ----write(f,i);
    Nhưng thầy em bảo dùng xâu cho dễ, sau đó cải tiến thành file. Bài này 10 test mà chạy được đến test 5 là ok rồi. Lấy giải KK thôi.
    Anh nói không cần dùng xâu chỉ cần in ra:

    for i:=1 to n do
    ----write(f,i);
    Vậy anh cho code toàn bài {gồm xuất và cộng các chữ số 1->n} luôn nha. Để em hỏi thầy xem sao.:lick:

  3. #23
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Trích dẫn Gửi bởi khaimy123
    Lúc đầu em cũng nghĩ đến cách in:

    for i:=1 to n do
    ----write(f,i);
    Nhưng thầy em bảo dùng xâu cho dễ, sau đó cải tiến thành file. Bài này 10 test mà chạy được đến test 5 là ok rồi. Lấy giải KK thôi.
    Anh nói không cần dùng xâu chỉ cần in ra:

    for i:=1 to n do
    ----write(f,i);
    Vậy anh cho code toàn bài {gồm xuất và cộng các chữ số 1->n} luôn nha. Để em hỏi thầy xem sao.:lick:
    Việc cộng 2 chuỗi số bạn tham khảo thêm trong box, chỉ là cộng từ phần tử cuối cộng lên có nhớ thôi.
    Việc xuất thì như code mình nêu trên.
    Bạn thi gì mà lấy giải KK mà cho cả test ra thế này...

  4. #24
    Ngày tham gia
    Mar 2016
    Bài viết
    0
    Sửa giùm em code bài này với
    Mã:
    Type
    dayso=array[1..1000] of longint;
    Var
    a:dayso;
    k,l:string;
    j,i,n,s,e,tam,o:integer;
    fi,fo,f:text;
    Procedure Init;
    Begin
    Assign(fi,'Number0.inp');
    Assign(fo,'Number0.out');
    Assign(f,'Tam00.out');
    Reset(fi);
    Rewrite(fo);
    End;
    Procedure Enter;
    Begin
    Readln(fi,n);
    End;
    Procedure Solve;
    Begin
    s:=02;
    l:='';
    k:='';
    tam:=0;
    s:=0;
    For i:=1 to n do
    Begin
    str(i,k);
    l:=l+k;
    For j:=1 to length(l) do
       write(f,l[i]);
    End;
    Reset(f);
    o:=0;
    While not eof(f) do
    Begin
    inc(o);
    Read(f,a[o]);
    End;
    For I:=1 to n do
    s:=s+a[i];
    Write(fo,s);
    End;
    Procedure Thoat;
    Begin
    Readln;
    Close(fi);
    Close(fo);
    Close(f);
    End;
    Begin
    Init;
    Enter;
    Solve;
    Thoat;
    End.

  5. #25
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Bạn đưa code nhưng không nói đề bài hay ý tưởng gì hết thì sao biết đường đâu mà lần.
    Bạn khắc phục nha!

  6. #26
    Ngày tham gia
    Aug 2015
    Bài viết
    1
    Đây là nguyên văn bài thi
    TỔNG CÁC CHỮ SỐ
    Cho số nguyên dương n. VIết các số nguyên liên tiếp từ 1 tới n trong hệ thập phân để tạo ra một dãy các chữ số. Hãy tính tổng các chữ số của dãy.

    Ví dụ : với n = 12, ta có dãy chữ số 123456789101112 với tổng là 51.

    test 1 : n = 12
    test 2 : n = 123
    test 3 : n = 2468
    test 4 : n = 13579
    test 5 : n = 12481632
    test 6 : n = 123456789
    test 7 : n = 9876543210
    test 8 : n = 123123123123
    test 9 : n = 123456789123456789
    test 10: n = 98765432100123456789

    Ý tưởng:
    0. Ngoài việc tạo file inp và file out còn tạo thêm file Tam.out(bộ nhớ ảo)
    1. Đầu tiên chuyển dãy số từ 1->n sang chuỗi.
    2. Đọc chuỗi vào file tạm.
    3. Đọc dữ liệu từ file tạm vào mảng.
    4. Cộng các phần tử của mảng.

  7. #27
    Ngày tham gia
    Aug 2015
    Bài viết
    7
    Trích dẫn Gửi bởi khaimy123
    Sửa giùm em code bài này với
    Mã:
    Type
    dayso=array[1..1000] of longint;
    Var
    a:dayso;
    k,l:string;
    j,i,n,s,e,tam,o:integer;
    fi,fo,f:text;
    Procedure Init;
    Begin
    Assign(fi,'Number0.inp');
    Assign(fo,'Number0.out');
    Assign(f,'Tam00.out');
    Reset(fi);
    Rewrite(fo);
    End;
    Procedure Enter;
    Begin
    Readln(fi,n);
    End;
    Procedure Solve;
    Begin
    s:=02;
    l:='';
    k:='';
    tam:=0;
    s:=0;
    For i:=1 to n do
    Begin
    str(i,k);
    l:=l+k;
    For j:=1 to length(l) do
       write(f,l[i]);
    End;
    Reset(f);
    o:=0;
    While not eof(f) do
    Begin
    inc(o);
    Read(f,a[o]);
    End;
    For I:=1 to n do
    s:=s+a[i];
    Write(fo,s);
    End;
    Procedure Thoat;
    Begin
    Readln;
    Close(fi);
    Close(fo);
    Close(f);
    End;
    Begin
    Init;
    Enter;
    Solve;
    Thoat;
    End.
    Code của bạn ghi ra file theo liền mạch, việc khai báo phần tử a thuộc longint, khi đọc máy sẽ tính các phần tử liền nhau là 1 số => vượt longint.
    Vì vậy bạn cần cải thiện bằng cách vừa in file vừa tính tổng, bỏ việc khai báo mảng A [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

  8. #28
    Ngày tham gia
    Aug 2015
    Bài viết
    3
    Thật ra cũng không cần dùng đến mảng. Chỉ việc đọc vào string rồi xử lí là ok. Bởi vì 1 số cũng không quá 256 chữ số.

  9. #29
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Trích dẫn Gửi bởi HappySoftGroup
    Thật ra cũng không cần dùng đến mảng. Chỉ việc đọc vào string rồi xử lí là ok. Bởi vì 1 số cũng không quá 256 chữ số.
    Nhưng mà số từ 1 -> n, test 10: n=98765432100123456789
    Nối lại chắc dài hơn 256 kí tự rồi.

  10. #30
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi khaimy123
    Nhưng mà số từ 1 -> n, test 10: n=98765432100123456789
    Nối lại chắc dài hơn 256 kí tự rồi.
    Bạn sai lầm ở chỗ này. Sinh ra số nào, lưu số đấy vào file rồi xử lí liền chứ đừng có nối thành 1 cục rồi mới xử lí. Làm như vậy tốn thời gian lắm! Nó cũng khắc phục được vấn đề kiểu dữ liệu.

Trang 3 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •