1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài Tập Lớn Nhóm 5 Toán Rời Rạc.pdf

15 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Liệt kê tất cả các dãy con k phần tử của dãy A sao cho tổng các phần tử của dãy con đó đúng bằng P
Tác giả Nhóm 5
Người hướng dẫn PTS. Nguyễn Thị Mai Trang
Chuyên ngành Toán rời rạc
Thể loại Bài tập lớn
Định dạng
Số trang 15
Dung lượng 303,36 KB

Nội dung

Downloaded by tailieu schat tailieuschat@gmail.comlOMoARcPSD|38482106... Downloaded by tailieu schat tailieuschat@gmail.comlOMoARcPSD|38482106... Downloaded by tailieu schat tailieuschat

Trang 1

BÀI T P L N Ậ Ớ

- Nhóm 5, t 6

-3 BT2-VD6

* Đ bài ề : Cho dãy s A = (aố 1, a2, …, an) và s t nhiên P Hãy ố ự

li t kê t t c các dãy con k ph n t c a dãy A sao cho t ng ệ ấ ả ầ ử ủ ổ các ph n t c a dãy con đó đúng b ng P.ầ ử ủ ằ

Ví d : A = (5, 10, 15, 20, 25, 30, 35), n = 7, k = 3, P = 50 ta có ụ các dãy con sau:

(5, 10, 35),

(5, 20, 25),

(10, 15, 25),

* L u đ thu t toán ư ồ ậ

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 3

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 5

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 7

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 8

#include <bits/stdc++.h>

using namespace std;

#de昀椀ne MAX 100

// khởi tạo các giá trị

int a[MAX], n, k, dem = 0, p;

int v[MAX];

// khoi tao mang luu cac gia tri

vector<vector<int>> ve;

// điều kiện dừng

bool ok = true;

// kiểm tra mảng a xem có tổng các phần tử bằng p hay ko bool kiemtra(int a[], int k)

{

int sum = 0;

for (int i = 1; i <= k; i++)

{

Trang 9

sum += v[a[i]];

}

return (sum == p);

}

// Thiết lập cấu hình đầu 琀椀ên xắp xếp mảng theo thứ tự tăng dần

void Init()

{

cout << "Nhap so luong phan tu n : \n" ; cin >> n;

cout << "Nhap so p : \n"; cin >> p;

cout << "Nhap day con k : \n"; cin >> k;

cout << "Nhap cac phan tu cua mang v : \n";

for (int i = 1; i <= n; i++)

{

cin >> v[i];

}

// sắp xếp mảng tăng dần từ

sort(v+1,v+n+1);

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 10

// lưu vị trí vào mảng a

for (int i = 1; i <= k; i++)

{

a[i] = i;

}

}

// cập nhật cấu hình hiện tại nếu thỏa mãn tổng bằng p và biến đếm tăng dần

void Result()

{

if (kiemtra(a, k))

{

// cout << "\nKet qua " << ++dem << ": ";

dem++;

vector<int> tmp;

for (int i = 1; i <= k; i++)

{

// cout << v[a[i]] << " ";

tmp.push_back(v[a[i]]);

Trang 11

}

// cout << endl;

ve.push_back(tmp);

}

}

// Sinh ra tập con k phần tử

void Next_Combina琀椀on()

{

int i = k;

// xuất phát từ vị trí k

while (i > 0 && a[i] == n - k + i) // xác định chỉ số để a[i] != n -

k + i;

{

i ;

}

if (i > 0) // nếu chưa phải tổ hợp cuối cùng

{

a[i]++;

// thay đôỉ tăng chỉ số thêm 1

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 12

for (int j = i + 1; j <= k; j++)

{

a[j] = a[j - 1] + 1; // các vị trí từ i - 1 đến k cộng thêm 1 chỉ

số

}

}

else

// điều kiện dừng khi đạt cấu hình cuối cùng

ok = false;

}

void Full_At()

{

cout << "\nSo cau hinh thoa man la : " << dem << endl; int z = 0;

// in ra các cấu hình thỏa mãn

for(auto x : ve)

{

cout << "\nCau hinh " << ++z << ": ";

for(int i=0; i<k; i++)

Trang 13

{

cout << x[i] << " ";

} cout << endl;

}

if(dem == 0) cout << "khong co gia tri thoa man!"; }

int main()

{

Init();

// khởi tạo các gía trị cần thiết

while (ok)

{

Result();

Next_Combina琀椀on();

}

Full_At();

return 0;

}

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Trang 14

* K t qu ế ả:

VD: N = 7, K = 3, P = 50, dãy N ph n t : ầ ử 5, 10, 15, 20, 25, 30, 35

Trang 15

Downloaded by tailieu schat (tailieuschat@gmail.com)

lOMoARcPSD|38482106

Ngày đăng: 08/03/2024, 16:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w