Giúp đỡ bài toán C++ tìm tập con thỏa mãn yêu cầu

Xin chào mọi người,
Em đang học về C++ và có được thầy giáo yêu cầu giải bài toán sau

Theo mình hiểu trong ví dụ trên, các dãy con thỏa mãn bao gồm 6 dãy con lần lượt là: {5}, {4}, {3}, {3,2}, {3,2,1},{2,1}.

Mình đã cài đặt như sau, tuy nhiên kết quả không như ý muốn.
Mong mọi người giúp đỡ, xin cảm ơn.

#include <iostream>

using namespace std;
int timTrongSoLonNhat(int a[], int n, int m, int M) {
    int kq = 0;
    for (int i = 0; i < n; i++) {
        int sum = a[i];
        if (sum >= m && sum <= M) {
            kq++;
        }
        for (int j = i; j < n; j++) {
            sum += a[j];
            if (sum >= m && sum <= M) {
                kq++;
            } else {}
        }
    }
    return kq;
}
int main() {
    int kq = 0;
    int n, m, M;
    cin >> n >> m >> M;
    int a[n];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    kq = timTrongSoLonNhat(a, n, m, M);
    cout << kq;
    return 0;
}
1 Like

Kết quả của bạn như thế nào vậy, cho ví dụ được không?

Theo yêu cầu thì cứ tính tổng, khi nào >= m && <= M thì ++, đến khi lớn hơn M thì dừng.

Bạn dùng đến 2 lần đoạn này sát nhau thì đoạn mã của bạn có chỗ dư thừa, chưa hiệu quả rồi đấy.

2 Likes

Đây bạn
Ví dụ cụ thể:

  • Input
5 3 6
5 4 3 2 1
  • Output:
6

Ví dụ về nhập/xuất sai của bạn ấy chứ! Bạn bảo kết quả không như ý mà, nó sai ra sao?

Mình chạy đoạn mã của bạn cùng với nhập/xuất của đề bài thì kết quả đúng! Không hiểu bạn gặp vấn đề gì nữa?!

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?