30/09/2018, 19:45

Bài toán rất dễ (dễ sai)

Em có code một bài như sau:

Nếu chúng ta liệt kê tất cả các số tự nhiên dưới 10 là bội số của 3 hoặc, ta sẽ nhận được các số: 3 5 6 và 9. Tổng của những buội số đó là 23. Yêu cầu đề bài tìm tổng của tất cả các số tự nhiên của 3 hoặc 5 nhỏ hơn 1000.

Dưới đây là code của em, khi nộp bài, em rất hốt hoảng là tại sao kết quả của mình lại sai một cách tự tin đến thế. Mong các anh giúp em tìm ra lỗi giúp em (Kết quả chính xác là 233168)

    while (3*k < 1000) and (5*k < 1000)
    do
    begin
    if (3*k < 1000) then tong:= tong + 3*k;
    if (5*k < 1000) then tong:= tong + 5*k;
    k := k + 1;
    end;
yoyo viết 21:50 ngày 30/09/2018

Bởi vì bạn cộng hai lần cho số vừa là bội của 3 vừa là bội của 5, ví dụ như 15

Khôi Trần viết 21:49 ngày 30/09/2018

và vì điều kiện là and nên sai thêm sai

Lưu Nguyễn Phát viết 21:47 ngày 30/09/2018

Cảm ơn bạn nhiều lắm

Lưu Nguyễn Phát viết 21:46 ngày 30/09/2018

Cảm ơn bạn, Khôi

Gió viết 21:56 ngày 30/09/2018

Bài này làm trong O(1) thôi
Gọi F(x,n) là tong cac số nằm [0;x] chia hết cho n
F(x,n) = n*(x/n+1) * (x/n) / 2
Tong Các số < x chia hết cho n = F(x-1,n)

Từ đó có kq bài toán = F(999,3)+F(999,5)-F(999,15) = 233168

Bài liên quan
0