Hướng dẫn giải của [200 đề thầy Đức] Bài 105: Tìm giá trị dương lớn nhất


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Cho biểu thức T = 1 + 1/3 + 1/5 + ... + 1/(2N-1) và một số thực x. Với mỗi bộ dữ liệu, tìm số nguyên dương N nhỏ nhất để tổng T đạt tới x, và in N ra.

Cách làm
  1. Với mỗi bộ dữ liệu, đặt N = 0 và tổng T = 0.

  2. Trong khi T vẫn nhỏ hơn x, tăng N lên 1 rồi cộng số hạng 1/(2N-1) vào T. Lưu ý phải dùng số thực 1.0 để phép chia không bị làm tròn thành số nguyên.

  3. Khi vòng lặp dừng, N chính là số cần tìm. In N ra một dòng.

  4. Với ví dụ x = 1.6: sau 3 số hạng T = 1.533 vẫn nhỏ hơn 1.6, sau số hạng thứ 4 T = 1.676 đã vượt 1.6 nên đáp án là 4.

#include <bits/stdc++.h>
using namespace std;

int main() {
    int t;
    cin >> t;
    while (t > 0) {
        double x;
        cin >> x;
        // Cộng dần các số hạng 1, 1/3, 1/5, ... cho đến khi tổng đạt x
        int n = 0;
        double tong = 0;
        while (tong < x) {
            n++;
            tong = tong + 1.0 / (2 * n - 1);
        }
        cout << n << "\n";
        t--;
    }
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.