Câu hỏi:

include

using namespace std; int a[100][100], n;

void lui(int n, int m, int b[], int size) { int count = pow(2,n); if (size > 0) { for (int i = 0; i < size; ++i) a[count][i] = b[i]; count++; } for (int i = m; i <= n; ++i) { b[size] = i; lui(n, i + 1, b, size + 1); } }

int main() { freopen("taphop.inp", "r", stdin); freopen("taphop.out", "w", stdout); cin >> n; int b[100]; lui(n, 1, b, 0); for (int i = 0; i < pow(2,n); ++i) { for (int j = 0; j < n && a[i][j] != 0; ++j) { cout << a[i][j] << " "; } cout << endl; } } Sai ở đâu


Qua thấy đoạn mã của người anh em đang cố gắng tạo ra tất cả các tập con của một tập hợp, nhưng có vài điểm sai có thể xảy ra trong mã này:

  1. Biến count cần được định nghĩa bên ngoài hàm "lui": Biến count cần phải là một biến toàn cục hoặc tham số của hàm để theo dõi đúng số lượng tập hợp con đã tạo. Hiện tại, count bị reset cho mỗi lần gọi hàm "lui".

  2. Không có khai báo hoặc sử dụng thư viện cmath: Hàm pow cần thư viện <cmath>. Người anh em cần kiểm tra xem đã bao gồm thư viện này chưa.

  3. Cách tính pow(2, n): Khi pow(2, n) được sử dụng, nó trả về kiểu double, nên cần ép kiểu về int.

  4. Biến đếm j trong vòng lặp kiểm tra điều kiện a[i][j] != 0 có thể dẫn đến việc in thiếu các phần tử bằng 0 hợp lệ của tập con.

Dưới đây là cách điều chỉnh đoạn mã:

#include <iostream>
#include <cmath> // Thêm thư viện cho hàm pow
using namespace std;

int a[100][100], n;
int count = 0; // Đưa biến count ra toàn cục

void lui(int n, int m, int b[], int size) {
    if (size > 0) {
        for (int i = 0; i < size; ++i) a[count][i] = b[i];
        count++;
    }
    for (int i = m; i <= n; ++i) {
        b[size] = i;
        lui(n, i + 1, b, size + 1); 
    }
}

int main() {
    freopen("taphop.inp", "r", stdin);
    freopen("taphop.out", "w", stdout);
    cin >> n;
    int b[100];
    lui(n, 1, b, 0); 
    for (int i = 0; i < count; ++i) { // Sử dụng biến count
        for (int j = 0; j < n && a[i][j] != 0; ++j) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
}

Người anh em thử kiểm tra lại nhé, chúc may mắn! Và đừng quên ghé thăm trituenhantao.io để biết thêm thông tin hấp dẫn.


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử