Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: bài tập vòng lặp

  1. #1
    Ngày gia nhập
    03 2021
    Bài viết
    0

    Mặc định bài tập vòng lặp

    Viết chương trình tìm số n nhỏ nhất sao cho

    1+1/2+...+1/n>S

    với S là số thực (double) dương được đọc từ bàn phím.

    Đầu vào

    Một số thực dương S (0<S≤10.0).

    Đầu ra

    In n ra màn hình.


    Chú ý

    Dữ liệu đầu vào luôn hợp lệ, bạn không cần kiểm tra.
    Không sử dụng printf trước scanf.
    Xem thêm các ví dụ trong phần For example để biết thêm chi tiết về đầu vào/đầu ra.


    Gợi ý

    Bài này thuộc dạng tìm số đầu tiên thoả điều kiện kết hợp với tính giá trị cho bước kế tiếp dựa vào bước hiện tại.
    tong = 1.0
    Cho n chạy từ 0, 1, 2, ...
    Kiểm tra điều kiện tong > S, nếu thoả thì thoát
    Tính lại tong cho bước kế tiếp (n+1) = tong (cũ) + 1/(n+1)
    In giá trị của n


    example
    input 1.0

    output 2
    Attached Thumbnails Attached Thumbnails z2384563233344_a5d83c9b9afae8c4f56556d6be52113a.jpg  

  2. #2
    Ngày gia nhập
    02 2016
    Bài viết
    311

    Trích dẫn Nguyên bản được gửi bởi thedat1310 Xem bài viết
    Viết chương trình tìm số n nhỏ nhất sao cho

    1+1/2+...+1/n>S

    với S là số thực (double) dương được đọc từ bàn phím.

    Đầu vào

    Một số thực dương S (0<S≤10.0).

    Đầu ra

    In n ra màn hình.


    Chú ý

    Dữ liệu đầu vào luôn hợp lệ, bạn không cần kiểm tra.
    Không sử dụng printf trước scanf.
    Xem thêm các ví dụ trong phần For example để biết thêm chi tiết về đầu vào/đầu ra.


    Gợi ý

    Bài này thuộc dạng tìm số đầu tiên thoả điều kiện kết hợp với tính giá trị cho bước kế tiếp dựa vào bước hiện tại.
    tong = 1.0
    Cho n chạy từ 0, 1, 2, ...
    Kiểm tra điều kiện tong > S, nếu thoả thì thoát
    Tính lại tong cho bước kế tiếp (n+1) = tong (cũ) + 1/(n+1)

    In giá trị của n


    example
    input 1.0

    output 2
    Phần tô đậm chưa chắc đã là thuật toán tối ưu.
    Thuật toán ưu việt hơn dùng S - 1/n. Không phải dùng đến biến tong.

  3. #3
    Ngày gia nhập
    03 2021
    Bài viết
    0

    em chưa hiểu chỗ gợi ý tại sao tong = 1 rồi xuống dưới lại kêu tính tổng lại cái nữa
    với lại nếu tổng đã = 1 thì chạy n làm chi ạ
    giải thích giúp em với ạ !!

  4. #4
    Ngày gia nhập
    02 2016
    Bài viết
    311

    Trích dẫn Nguyên bản được gửi bởi thedat1310 Xem bài viết
    em chưa hiểu chỗ gợi ý tại sao tong = 1 rồi xuống dưới lại kêu tính tổng lại cái nữa
    với lại nếu tổng đã = 1 thì chạy n làm chi ạ
    giải thích giúp em với ạ !!
    Tại vì người nào đó đưa ra cái gợi ý lủng củng.
    Trong chuỗi số 1 + 1/2 + 1/3 + ... + 1/n
    thì phần tử đầu tiên, 1, ứng với n = 1.
    Lúc n = 0 thì đáng lẽ tổng phải bằng 0.

    Code theo "gợi ý" ban đầu thì như vầy:
    double tong;
    int n;
    for (n = 1, tong = 1.; tong <= S; tong += 1./++n);
    // khi vòng lặp này thoát thì n là đáp số.

    Code theo giải thuật tốt hơn thì như vầy:
    int n;
    for (n = 0; S >= 0; S -= 1./++n);

    Lưu ý: các con số 1 đều có dấu chấm để bảo đảm chúng là số thực. Nếu không có dấu chấm thì chúng là số nguyên. C/C++ sẽ dùng phép chia số ngyên nếu cả tử lẫn mẫu đều là số nguyên.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn