Kết quả 1 đến 2 của 2

Chủ đề: Số bền !!

  1. #1
    Ngày tham gia
    Nov 2015
    Bài viết
    0

    Số bền !!

    Bài 1. Số bền
    Năm 1973, nhà Toán học Neil Sloan đưa ra khái niệm độ bền của một số nguyên không âm N như sau:
    Nếu N có một chữ số thì độ bền của N bằng 0.
    Nếu N có từ 2 chữ số trở lên thì độ bền của N bằng độ bền của số nguyên là tích các chữ số của N cộng 1.
    Cho N, tính độ bền của N.
    Dữ liệu vào từ file văn bản: persist.inp
    Dòng 1: Số nguyên N (0 ≤ N ≤ 2.000.000.000).
    Kết quả ghi ra file văn bản: persist.out
    Dòng 1: Số nguyên là độ bền của N.
    Ví dụ
    persist.inp
    persist.out

    VD:
    99
    2
    GIải thích: Doben(99)=Doben(81)+1=Doben(8)+1+1=0+1+1=2

    Đối với bài này em dùng đệ quy để giải các bác sem có sai sót gì không nhá !!

    Mã:
    Program SOBEN;
    Var n,i,TICH,f,e:Integer;
        Str1:String;
    function PHANTICH(n:Integer):Integer;
    Begin
            Str(n,Str1);
            TICH:=1;
            for i:=1 to length(Str1) do
                    Begin
                    Val(Str1[i],f,e);
                    TICH:=TICH*f;
                    End;
            PHANTICH:=TICH;
    End;
    
    function DOBEN(n:Integer):Integer;
    Begin
            if n<10 then DOBEN:=0
            else
                    DOBEN:=DOBEN(PHANTICH(n))+1;
    End;
    
    BEGIN
    Write('Nhap vao so n: ');
    Readln(n);
    Write(DOBEN(n));
    END.

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Trích dẫn Gửi bởi sangpronhat
    Bài 1. Số bền
    Năm 1973, nhà Toán học Neil Sloan đưa ra khái niệm độ bền của một số nguyên không âm N như sau:
    Nếu N có một chữ số thì độ bền của N bằng 0.
    Nếu N có từ 2 chữ số trở lên thì độ bền của N bằng độ bền của số nguyên là tích các chữ số của N cộng 1.
    Cho N, tính độ bền của N.
    Dữ liệu vào từ file văn bản: persist.inp
    Dòng 1: Số nguyên N (0 ≤ N ≤ 2.000.000.000).
    Kết quả ghi ra file văn bản: persist.out
    Dòng 1: Số nguyên là độ bền của N.
    Ví dụ
    persist.inp
    persist.out

    VD:
    99
    2
    GIải thích: Doben(99)=Doben(81)+1=Doben(8)+1+1=0+1+1=2

    Đối với bài này em dùng đệ quy để giải các bác sem có sai sót gì không nhá !!

    Mã:
    Program SOBEN;
    Var n,i,TICH,f,e:Integer;
        Str1:String;
    function PHANTICH(n:Integer):Integer;
    Begin
            Str(n,Str1);
            TICH:=1;
            for i:=1 to length(Str1) do
                    Begin
                    Val(Str1[i],f,e);
                    TICH:=TICH*f;
                    End;
            PHANTICH:=TICH;
    End;
    
    function DOBEN(n:Integer):Integer;
    Begin
            if n<10 then DOBEN:=0
            else
                    DOBEN:=DOBEN(PHANTICH(n))+1;
    End;
    
    BEGIN
    Write('Nhap vao so n: ');
    Readln(n);
    Write(DOBEN(n));
    END.
    Nên thêm 2 thứ vào để đảm bảo ăn trọn:
    - Chuyển đệ quy thành cấu trúc stack tránh lỗi overstack.
    - Lập bản phương án lưu giữ giá trị.
    Tất nhiên chương trình phải sửa lại cho phù hợp.
    À và còn 1 điều nữa: n:integer là không chính xác với đề ra đâu nhá !
    [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

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
  •