Bài toán Tổng các số tự nhiên liên tiếp

Cô giáo dạy lập trình

Bài toán – Tổng các số tự nhiên liên tiếp

Cho trước số tự nhiên n. Lập thuật toán cho biết n có thể biểu diễn thành tổng của hai hoặc nhiều số tự nhiên liên tiếp hay không? Trong trường hợp có, hãy thể hiện tất cả các cách có thể có.

Thuật toán

Để kiểm tra xem một số tự nhiên n có thể biểu diễn thành tổng của hai hoặc nhiều số tự nhiên liên tiếp hay không, ta có thể thực hiện thuật toán sau đây:

Bước 1: Khởi tạo biến start bằng 1 và biến end bằng 2.

Bước 2: Tính tổng các số từ start đến end.

Bước 3: So sánh tổng với n. Nếu tổng bằng n, in ra dãy các số từ start đến end và tăng giá trị của biến end lên 1.

Bước 4: Nếu tổng nhỏ hơn n, tăng giá trị của biến end lên 1 và quay lại bước 2.

Bước 5: Nếu tổng lớn hơn n, giảm giá trị của biến start xuống 1 và quay lại bước 2.

Bước 6: Lặp lại các bước từ bước 2 đến bước 5 cho đến khi start lớn hơn hoặc bằng n.

Cài đặt bài toán với Python

n = int(input("Nhập số tự nhiên n: "))

start = 1
end = 2
total = start + end

while start < n:
    if total == n:
        print("Các số tự nhiên liên tiếp:", end="")
        for i in range(start, end+1):
            print(" ", i, end="")
        print()
        end += 1
        total += end
    elif total < n:
        end += 1
        total += end
    else:
        total -= start
        start += 1

Cài đặt bài toán với C++

#include <iostream>
using namespace std;

int main() {
    int n, start = 1, end = 2, total = start + end;
    cout << "Nhap so tu nhien n: ";
    cin >> n;
    while (start < n) {
        if (total == n) {
            cout << "Cac so tu nhien lien tiep: ";
            for (int i = start; i <= end; i++) {
                cout << i << " ";
            }
            cout << endl;
            end++;
            total += end;
        } else if (total < n) {
            end++;
            total += end;
        } else {
            total -= start;
            start++;
        }
    }
    return 0;
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *