You are on page 1of 5

Nhóm 13

1. Nguyễn Mạnh Dũng – B22DCCN132


2. Trần Đức Đạt – B22DCCN203
Họ và tên 3. Vũ Thành Nam – B22DCCN569
4. Lê Minh Ngọc – B22DCCN586
5. Ngô Thanh Vân – B22DCCN891

Bài lập trình Số 2

Môn Toán rời rạc

Giảng viên Nguyễn Thị Mai Trang

Ngày 11/10/2023
Điểm

I. Bài toán
Cho dãy số A = ( a1, a2,…., a3) gồm n số tự nhiên khác nhau và số tự nhiên k.
Hãy liệt kê tất cả các dãy con của dãy số A sao cho tổng các phần tử của dãy
con đó đúng bằng k.
II. Sơ đồ khối
III. Code bằng C++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, k;
int a[105] = {0};
vector <vector <int>> kq; // lưu các tập hợp tìm được
vector <int> tmp; // lưu tập hợp đang xét
string xnp="";
void sinh()
{
tmp.clear(); // làm sạch tmp để lưu tập hợp tiếp theo
int i = n - 1;
int sum = 0;
while (xnp[i]!='0' && i>=0) i--;
if (i<0) return;
xnp[i]='1';
for (int j = i + 1 ; j < n ; j++) xnp[j]='0'; // sinh xong cấu hình tiếp
theo của xnp
for (int i = 0 ; i < n ; ++i)
if (xnp[i] == '1') //xnp[i] == '1' thì lấy phần tử a[i], xnp[i] = '0' thì
ngược lại
{
sum+=a[i];
tmp.push_back(a[i]);
}
if (sum == k)
{
kq.push_back(tmp);
}
sinh();
}
int main() {
cin>>n>>k;
for (int i = 0 ; i < n ; ++i)
{
xnp+='0';
cin>>a[i];
}
sinh();
cout<<"So ket qua: "<<kq.size()<<'\n';
for (int i = 0 ; i < kq.size() ; ++i)
{
cout<<"Ket qua thu "<<i+1<<":\n";
for (int j = 0 ; j < kq[i].size() ; ++j)
cout<<kq[i][j]<<' ';
cout<<'\n';
}
return 0;
}

IV. Màn hình kết quả

You might also like