|
Để thực hiện bài này, bạn phải cho n chạy trong vòng lặp không xác định được kết quả, như vậy ta loại trừ được loop For, như vậy ta còn 2 loop là While, và Do - While. Mình chọn vòng lặp while
Tới đây, bạn xác định biến sẽ gồm 2 biến, tổng (T) cho float và. n cho integer sẽ tăng lên theo mỗi loop, và T sẽ là tổng của
[1/ các số lẻ liên tiếp ] như vậy T= T + 1/(2n+1)
Điều kiện sẽ là T ko lớn hơn 2.101999 => T < 2.101999
n sẽ chạy cho đến khi tổng lớn 2.101999 sẽ dừng lại, lúc đó khi bạn xuất ra màn hình (2n-1)-2 or 2n-3 để kết quả là số lẻ ngay sau n. Ở đây hơi khó hiểu 1 chút, mình sẽ làm ví dụ.
Ví dụ mình muốn kiếm n là số lớn nhất cho tổng của T+n nhỏ hơn 11.Lúc bắt đầu T=0- n=1 thì T=1
- n=2 thì T=3
- n=3 thì T=6
- n=4 thì T=10
- n=5 thì T=15
Sao chép mã Như vậy bạn xuất ra sẽ là n=4 chứ không phải bằng 5.. tương tự như trên bạn xuất ra 2n-3
Nói thì dài dòng nhưng làm thì dễ- #include<iostream>
- using namespace std;
- int main()
- {
- float T;
- int n;
-
- T = 0; n = 1;
- while (T <2.101999)
- {
- T = T + 1/(2*n-1);
- n++;
- }
- cout << "KQ: " << 2*n-3 << "\n";
- return 0;
- }
Sao chép mã Good luck
P/s: cơ mà sao kì thế nhở?.. Lúc nào Jos học C++ thì 1 nửa thời gian là học thuật toán mà?... Hồi đó ông chú dạy thì viết thuật toán trước rồi mới dc làm. Khi đi học, thì 1 tiết lí thuyết, 1 tiết thuật toán và 2 tiết thực hành mà!!
|
Rate
-
Xem tất cả
|