kết quả từ 1 tới 11 trên 11

Bài tập Pascal

  1. #1
    Ðến Từ
    Hà Tĩnh
    Thành Viên Thứ: 355740
    Giới tính: Nam
    Bài gửi
    2

    Bài tập Pascal

    1. Cho số nguyên dương N a)Đếm số ước của N b) Tính tổng các ước của N
    2. Người ta định nghĩa một số nguyên dương N được gọi là số đẹp nếu N thoả mãn một trong hai ñiều kiện sau:
    - N bằng 9
    - Gọi f(N) là tổng các chữ số của N thì f(N) cũng là số đẹp Cho số nguyên dương N (N < = 10^100 ), hãy kiểm tra xem N có phải là số đẹp không?

    3. Tìm K chữ số cuối cùng của M^N (0< K < = 9, 0 < = M, N < = 10^6)
    Cho $N (N \leq 10)$ nguyên dương a1, a2, … , an < = 10^9 . Tìm ước số chung lớn nhất, bội số chung nhỏ nhất của n số trên
    4.Cho N là một số nguyên dương không vượt quá 10^9 .Hãy tìm số chữ số 0 tận cùng của N
    5.Hãy đếm số cách đặt k quân xe lên bàn cờ n x n sao cho không có quân nào ăn được nhau (1 < = k < = n < =100).
    6. Tính số ước và tổng các ước của N!
    Quick reply to this message Trả lời       


  2. #2
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Bài tập Pascal

    Mấy bài của bạn có vẻ nghiêng về toán rất nặng.
    Bài 1: Đây là bài tập cơ bản. Bạn cần duyệt i từ 2 tới sqrt(n) rồi kiểm tra n mod i.

    Bài 2: Tổng các chữ số của 1 số N chính là N mod 9. Như vậy bài này ta chỉ cần tìm N mod 9 là xong. Thuật toán tính N mod 9 nếu N là số lớn như sau:
    Mã:
    Với từng chữ số N[i] của N
       result = (result * 10 + N[i]) mod 9.
    Bài 3: Bài này mục đích cần tìm chính là M^N mod 10^K. Gọi d = 10^k và lambda = 2*10^(K-1), ta có công thức:
    Mã:
    M^N mod d = A^B mod d,
    với M mod d = A mod d   và   N mod lambda = B mod lambda.
    Tư tưởng chính là vì M^N quá lớn nên ta phải thay thế M^N bằng A^B với A^B đủ nhỏ. Nhỏ tới cỡ nào thì bạn tự nghĩ xem nhé.

    - Phần 2 của bài này không khó lắm vì n chỉ có 10 số, hơn nữa chúng ta đã có thuật toán tìm UCLN và BCNN cực nhanh rồi.

    Bài 4: Bài này chỉ cần dùng while (N mod 10 = 0).

    Bài 5: Bài này mình đang xem có thể tìm đc công thức tính luôn hay là phải đệ quy quay lui.

    Bài 6: Bạn nhớ lại đinh nghĩa của N! như thế nào, và ước của nó là số nào nhé.
    LCD: 13.3" 1920x1080 IPS
    CPU: Intel i7 - 4700MQ (2.4 GHz - 3.4 GHz)
    GPU: Nvidia GTX 765m with GDDR5 2GB
    RAM: 2x8GB G.Skill 2133
    HDD: Samsung SSD 850 Pro 512 GB
    2 kg.

  3. 2 thành viên đã cảm ơn tengiday:


  4. #3
    Ðến Từ
    Hà Tĩnh
    Thành Viên Thứ: 355740
    Giới tính: Nam
    Bài gửi
    2

    Reply: Bài tập Pascal

    Trích Nguyên văn bởi tengiday Xem bài viết
    Mấy bài của bạn có vẻ nghiêng về toán rất nặng.
    Bài 1: Đây là bài tập cơ bản. Bạn cần duyệt i từ 2 tới sqrt(n) rồi kiểm tra n mod i.

    Bài 2: Tổng các chữ số của 1 số N chính là N mod 9. Như vậy bài này ta chỉ cần tìm N mod 9 là xong. Thuật toán tính N mod 9 nếu N là số lớn như sau:
    Mã:
    Với từng chữ số N[i] của N
       result = (result * 10 + N[i]) mod 9.
    Bài 3: Bài này mục đích cần tìm chính là M^N mod 10^K. Gọi d = 10^k và lambda = 2*10^(K-1), ta có công thức:
    Mã:
    M^N mod d = A^B mod d,
    với M mod d = A mod d   và   N mod lambda = B mod lambda.
    Tư tưởng chính là vì M^N quá lớn nên ta phải thay thế M^N bằng A^B với A^B đủ nhỏ. Nhỏ tới cỡ nào thì bạn tự nghĩ xem nhé.

    - Phần 2 của bài này không khó lắm vì n chỉ có 10 số, hơn nữa chúng ta đã có thuật toán tìm UCLN và BCNN cực nhanh rồi.

    Bài 4: Bài này chỉ cần dùng while (N mod 10 = 0).

    Bài 5: Bài này mình đang xem có thể tìm đc công thức tính luôn hay là phải đệ quy quay lui.

    Bài 6: Bạn nhớ lại đinh nghĩa của N! như thế nào, và ước của nó là số nào nhé.
    Bạn có thể làm cụ thể ra được không.Mình chỉ vừa mới học và tiếp xúc với môn này thôi mà BTVN đã dư lày.
    Đây đều là các bài tập trong sách giáo khoa chuyên tin quyển 1.

  5. #4
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Bài tập Pascal

    Trích Nguyên văn bởi MIB1258 Xem bài viết
    Bạn có thể làm cụ thể ra được không.Mình chỉ vừa mới học và tiếp xúc với môn này thôi mà BTVN đã dư lày.
    Đây đều là các bài tập trong sách giáo khoa chuyên tin quyển 1.
    Mình nghĩ nếu là lần đầu tiếp xúc với lập trình mà đòi viết như thế này thì quá nhiều và khó nữa. Không rõ bạn có bao nhiêu thời gian, bắt đầu từ bài đầu tiên, bạn đã có thể làm đc những gì rồi? Bạn xem đoạn code sau có hiểu không?
    Mã:
    // Giả sử n > 1.
    count := 2;
    sum := 1 + n;
    for i := 2 to trunc(sqrt(n)) do
       if (n mod i = 0) then   // n chia hết cho i nên i là ước của n.
          begin
             count := count + 1;   // có 1 ước nữa là i nên tăng biến đếm.
             sum := sum + i;   // cộng ước mới vào cho tổng.
             if (n div i <> i) then   // nếu i là ước thì n / i cũng là ước nếu n <> i^2
                begin
                   count := count + 1;
                   sum := sum + n div i;
                end;
          end;
    writeln(count, ' ', sum);

  6. Đã cảm ơn tengiday:


  7. #5
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 351715
    Bài gửi
    302

    Reply: Bài tập Pascal

    nhìn oải quá, hồi xưa học môn này k biet gì hết trơn
    THIẾT KẾ WEB TẠI "THIET KE WEB CHUYEN.COM" THEO YÊU CẦU TRỌN GÓI CHỈ 1.990.000 VND -  0934150770 (VIBER) - 0978106552 (ZALO)(Mr. Hoàng)

  8. #6
    Ðến Từ
    Quảng Bình
    Thành Viên Thứ: 353068
    Giới tính: Nam
    Bài gửi
    22

    Reply: Bài tập Pascal

    bạn ơi cho mình hỏi chút,ở bài 2.nếu số lớn ta cung phải dùng mảng để lưu trữ như bài trừ ở post trước rồi sau đó sẽ xử lý giống ý của bạn phải không ak

  9. #7
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Bài tập Pascal

    Trích Nguyên văn bởi tuongsonqt Xem bài viết
    bạn ơi cho mình hỏi chút,ở bài 2.nếu số lớn ta cung phải dùng mảng để lưu trữ như bài trừ ở post trước rồi sau đó sẽ xử lý giống ý của bạn phải không ak
    Đúng rồi, bạn lưu số lớn trong mảng y như trước. Để tính N mod 9 thì bạn làm như kiểu mình ghi ở post #2, đừng làm division gì cả. Chỉ còn 1 chi tiết nhỏ nữa là nếu kết quả bằng 0 thì phải chuyển nó thành 9 (i.e số đẹp). Mình quên ghi, lúc khởi tạo phải là result = 0.

  10. #8
    Ðến Từ
    Quảng Bình
    Thành Viên Thứ: 353068
    Giới tính: Nam
    Bài gửi
    22

    Reply: Bài tập Pascal

    bạn nói rõ hơn cho mình kể quả =0 thì chuyển thành 9 dk ko
    ahàm f(n) là tổng các chữ số của n thì f(n) tính được đó làm sao biết được là số đẹp hay ko hở bạn
    và mảng trên lưu ngược hoặc xuôi đều dược phải ko bạn

  11. #9
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Bài tập Pascal

    Trích Nguyên văn bởi tuongsonqt Xem bài viết
    bạn nói rõ hơn cho mình kể quả =0 thì chuyển thành 9 dk ko ak
    và cái này nữa mảng của mình chak ko cần phải luu ngược lại giống post trước phải ko bạn?
    Câu hỏi của bạn rất hay: tổng các chữ số của abcd = tổng các chữ số của dcba phải không bạn :-) Bạn thử đoạn code sau:
    Mã:
    a[1] := 6; a[2] := 3; a[3] := 7; a[4] := 5;
    n := 4;
    result := 0;
    for i := 1 to n do   // bạn đổi thành "n downto 1" xem thử nhé
        result := (10 * result + a[i]) mod 9;
    if (result = 0) then result := 9;   // dòng lệnh này có thể bỏ qua nếu cần kiểm tra số đẹp, chứ ko phải tìm digital sum.
    writeln(result);
    Tổng (liên tục) các chữ số của 1 số luôn lớn hơn 0 nếu số đó khác 0. Khi một số mod 9 thì chỉ có thể từ 0 tới 8, nên kết quả 0 là thay thế cho số 9. Bạn làm ví dụ tay sẽ thấy điều này.

    PS: Điều thú vị bạn có lẽ nhận ra là: abcd mod 9 = dcba mod 9, cho dù a hay d là số 0. :-)

    hàm f(n) là tổng các chữ số của n thì f(n) tính được đó làm sao biết được là số đẹp hay ko hở bạn.
    Thật ra, chúng ta tính f(f(f(...f(n)...))) đó.

  12. #10
    Ðến Từ
    Quảng Bình
    Thành Viên Thứ: 353068
    Giới tính: Nam
    Bài gửi
    22

    Reply: Bài tập Pascal

    voi bài này mình cũng đang hiểu hết sức là mơ hồ
    1. về cách lưu trữ: ở đây ta phải dùng xâu tách từng chữ số lưu vào mảng mới được
    2. số đẹp ở đây có ngĩa là tổng các chữ số của n phải = 9 hay sao hở bạn( mình chỉ chưa hiểu định nghĩa f(N) là tổng các chữ số của N thì f(N) cũng là số đẹp ) còn cách tính của bạn thì mình đã hiểu

  13. #11
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Reply: Bài tập Pascal

    Trích Nguyên văn bởi tuongsonqt Xem bài viết
    voi bài này mình cũng đang hiểu hết sức là mơ hồ
    1. về cách lưu trữ: ở đây ta phải dùng xâu tách từng chữ số lưu vào mảng mới được
    2. số đẹp ở đây có ngĩa là tổng các chữ số của n phải = 9 hay sao hở bạn( mình chỉ chưa hiểu định nghĩa f(N) là tổng các chữ số của N thì f(N) cũng là số đẹp ) còn cách tính của bạn thì mình đã hiểu
    1) Mình chỉ cần chữ số, không có tính toán như cộng trừ, nên không cần dùng mảng shortint hay integer, dùng trực tiếp string luôn cũng được. Thay vì a[i] thì giờ dùng ord(a[i]) - 48.
    2) Đó là định nghĩa kiểu truy hồi, hay dạng đệ quy.
    Mã:
    N là số đẹp nếu:
    - N = 9, hoặc
    - f(N) là số đẹp.
    
    f(N) là số đẹp nếu:
    - f(N) = 9, hoặc
    - f(f(N)) là số đẹp.
    
    f(f(N)) là số đẹp nếu:
    - f(f(N)) = 9, hoặc
    - f(f(f(N))) là số đẹp.
    ...