Professional Documents
Culture Documents
Bài thực hành số 3
Bài thực hành số 3
Tables of Figures
Hình 1 Đề bài bài 3.1.........................................................................................................................3
Hình 2 Code bài 3.1...........................................................................................................................3
Hình 3 Kết quả bài 3.1.......................................................................................................................3
Hình 4 Đề bài bài 3.2.........................................................................................................................4
Hình 5 Code bài 3.2 (1)......................................................................................................................5
Hình 6 Code bài 3.2 (2).....................................................................................................................5
Hình 7 Code bài 3.2 (3).....................................................................................................................5
Hình 8 Kết quả bài 3.2.......................................................................................................................6
Hình 9 Đề bài bài 3.3.........................................................................................................................8
Hình 10 Code bài 3.3 (1)...................................................................................................................9
Hình 11 Code bài 3.3 (2)...................................................................................................................9
Hình 12 Code bài 3.3 (3)...................................................................................................................9
Hình 13 Code bài 3.3 (4).................................................................................................................10
Hình 14 Kết quả bài 3.3...................................................................................................................10
Hình 15 Đề bài bài 3.4.....................................................................................................................13
Hình 16 Code bài 3.4 (1).................................................................................................................13
Hình 17 Code bài 3.4 (2).................................................................................................................13
Hình 18 Code bài 3.4 (3).................................................................................................................14
Hình 19 Code bài 3.4 (4)..................................................................................................................14
Hình 20 Kết quả bài 3.4...................................................................................................................14
Hình 21 Đề bài bài 3.5.....................................................................................................................17
Hình 22 Code bài 3.5 (1)..................................................................................................................17
Hình 23 Code bài 3.5 (2)..................................................................................................................17
Hình 24 Code bài 3.5 (3)..................................................................................................................18
Hình 25 Kết quả bài 3.5...................................................................................................................19
Hình 26 Đề bài bài 3.6.....................................................................................................................21
Hình 27 Code bài 3.6 (1)..................................................................................................................21
Hình 28 Code bài 3.6 (2)..................................................................................................................22
Hình 29 Kết quả bài 3.6..................................................................................................................22
Hình 30 Đề bài bài 3.7.....................................................................................................................24
Hình 31 Code bài 3.7 (1)..................................................................................................................24
Hình 32 Code bài 3.7 (2)..................................................................................................................24
Hình 33 Code bài 3.7 (3)..................................................................................................................25
Hình 34 Kết quả bài 3.7..................................................................................................................28
Hình 35 Đề bài bài 8........................................................................................................................30
Hình 36 Code bài 8 (1).....................................................................................................................31
Hình 37 Code bài 8 (2).....................................................................................................................31
Hình 38 Code bài 8 (3).....................................................................................................................31
Hình 39 Kết quả bài 8.....................................................................................................................32
Hình 40 Đề bài bài 9........................................................................................................................34
Hình 41 Code bài 9 (1).....................................................................................................................34
Hình 42 Code bài 9 (2).....................................................................................................................34
Hình 43 Code bài 9 (3).....................................................................................................................35
Hình 44 Code bài 9 (4).....................................................................................................................35
Hình 45 Kết quả bài 9.....................................................................................................................36
Hình 46 Đề bài bài 10......................................................................................................................38
Hình 47 Code bài 10 (1)...................................................................................................................39
Hình 48 Code bài 10 (2)...................................................................................................................39
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
Bài 3.1. Dãy Lucas được định nghĩa bởi Ln = Ln-1 + Ln-2 với L0 = 2,
L1 = 1. Hãy viết hàm tính số Lucas thứ n.
/*
Bài 3.1. Dãy Lucas được định nghĩa bởi Ln = Ln-1 + Ln-2 với L0 = 2, L1 = 1. Hãy viết hàm tính số
Lucas thứ n.
*/
int lucas(int n) {
/*****************
if(n<=1) return 2-n; //Trả về 2-n nếu n nhỏ hơn hoặc bằng 1
/*****************/
Bài 3.2. Trên bàn cờ vua kích thước n*n có một quân mã đang ở ô
(1, 1). Hãy đưa ra một dãy các di chuyển của mã sao cho mỗi ô trên
bàn cờ đều được đi qua đúng 1 lần (ô (1, 1) được xem là đã đi qua).
/*
Bài 3.2. Trên bàn cờ vua kích thước n*n có một quân mã đang ở ô (1, 1).
Hãy đưa ra một dãy các di chuyển của mã sao cho mỗi ô trên bàn cờ đều được đi qua đúng 1 lần
(ô (1, 1) được xem là đã đi qua).
*/
#include <iostream>
int n;
int X[100], Y[100]; //# Lưu tọa độ các bước di chuyển của quân mã
int mark[100][100]; //# Đánh dấu vị trí các ô mà quân mã đã di chuyển qua
//# Mảng hx, hy mô tả 8 vị trí quân mã có thể di chuyển kể từ vị trí hiện tại
void print_sol(){
exit(0);
int xx = X[k-1] + hx[i]; //Biến xx là toạ độ x có thể có của quân mã trong bước đi tiếp theo
int yy = Y[k-1] + hy[i]; //Biến yy là toạ độ y có thể có của quân mã trong bước đi tiếp theo
/*****************
if((xx>0 && xx<=n) && (yy>0 && yy<=n) && mark[xx][yy]==0){ //Nếu xx và yy hợp lệ và ô xx-
yy chưa được đánh dấu thì
}
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
/*****************/
int main(){
return 0;
Bài 3.3. Một người xuất phát tại thành phố 1, muốn đi thăm tất cả
các thành phố khác, mỗi thành phố đúng 1 lần và quay về 1. Chi phí
để đi từ thành phố i sang thành phố j là cij. Hãy tìm tổng chi phí nhỏ
nhất có thể
/*
Bài 3.3.
Một người xuất phát tại thành phố 1, muốn đi thăm tất cả các thành phố khác, mỗi thành phố
đúng 1 lần và quay về 1.
Chi phí để đi từ thành phố i sang thành phố j là cij. Hãy tìm tổng chi phí nhỏ nhất có thể
*/
#include <bits/stdc++.h>
int cmin = INT_MAX; //# chi phí đi lại nhỏ nhất giữa hai thành phố khác nhau
int best = INT_MAX; //# tổng chi phí nhỏ nhất cần tìm, ban đầu đặt bằng giá trị vô cùng lớn
INT_MAX = 2^31-1
int curr; //# tổng chi phí tới thời điểm hiện tại
void input(){
cin >> n;
/*****************
/*****************/
int main() {
return 0;
Bài 3.4. Cho dãy a có n phần tử. Một dãy con của a là dãy thu
được bằng cách xóa đi một số phần tử của a và giữ nguyên thứ tự
các phần tử còn lại (có thể không xóa phần tử nào). Hãy tìm dãy con
tăng dài nhất của a.
/*
Bài 3.4. Cho dãy a có n phần tử. Một dãy con của a là dãy thu được bằng cách xóa đi một số phần
tử của a và giữ nguyên thứ tự các phần tử còn lại
(có thể không xóa phần tử nào). Hãy tìm dãy con tăng dài nhất của a.
*/
#include <bits/stdc++.h>
int a[1000], n;
int mem[1000]; //# mảng ghi nhớ lời giải các bài toán con đã được giải
void init(){
//# Hàm lis(i) trả về độ dài dãy con tăng dài nhất kết thúc bởi a[i]
int lis(int i) {
/*****************
for (int j=0; j<i; j++) { //Duyệt từng phần tử của mảng a
/*****************/
if (a[j] < a[i] && mem[i] == 1 + mem[j]){ //Nếu dãy đang tăng và i, j được đánh dấu là thuộc
dãy con
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
break;
cout << a[i] << " "; //In ra số thuộc dãy con
int main(){
init();
int res = 1, pos = 0; //Biến res tìm độ dài dãy con và biến pos lưu phần tử cuối cùng của dãy con
tăng dài nhất
res = lis(i);
cout << res << endl; //In ra chiều dài dãy con
return 0;
/*
*/
#include <iostream>
/*****************
return c[n][k];//Trả về C n k
/*****************/
int main() {
printf("\n");
printf("\n");
return 0;
Bài 3.6. Tìm ước chung lớn nhất của hai số nguyên a, b cho trước.
/*
Bài 3.6. Tìm ước chung lớn nhất của hai số nguyên a, b cho trước.
*/
#include <iostream>
/*****************
a = b; //Gán a = b
return a; //Trả về a
/*****************/
int main() {
cout << gcd(a, b) << endl << gcd2(a, b); //In ra giá trị
return 0;
Bài 3.7. Sử dụng phương pháp khử đệ quy bằng stack, hãy liệt kê
các xâu nhị phân độ dài n không có k bit 1 nào liên tiếp
/*
Sử dụng phương pháp khử đệ quy bằng stack, hãy liệt kê các xâu nhị phân độ dài n không có k bit
1 nào liên tiếp
*/
#include <bits/stdc++.h>
struct state{
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
int i, j, old_L; //Vị trí trong xâu i, giá trị bit j, số bit 1 liên tiếp trước đó old_L
//# constructor
};
int main() {
while (!s.empty()){ //
/*****************
if(L+1<k || top.j==0){ //Nếu chưa quá k bit 1 liên tiếp hoặc bit bằng 0 thì
/*****************/
return 0;
/*
Bạn đang muốn kiểm tra xem một vật cho trước có đúng nặng M như người ta nói hay không.
Có một cân thăng bằng và n quả cân. Quả thứ i nặng mi. Hãy chỉ ra một cách cân thỏa mãn.
*/
#include <bits/stdc++.h>
struct state{
state(int _i = 0, int _j = 0, int _s=0): i(_i), j(_j), s(_s){} //Giá trị mặc định
};
int main() {
int m[n+1]; //Mảng lưu cân nặng của các quả cân
for (int i = 1; i <= n; ++i) cin >> m[i]; //Nhập cân nặng cho từng quả
int sum = 0;
s.push(state(1, 0, 0));
s.push(state(1, 1, m[1]));
if (top.i >= n){ //Nếu đã duyệt hết tất cả các quả cân
if (x[i] == -1) cout << '-' << m[i]; //Nếu giá trị là -1 thì in ra - m[i]
if (x[i] == 1) cout << '+' << m[i]; //Nếu giá trị là 1 thì in ra + m[i]
s.push(state(top.i+1, 0,top.s));
s.push(state(top.i+1, 1,top.s+m[top.i+1]));
return 0;
tiếp và mọi chuỗi ngày tối đại làm việc liên tiếp đều có số ngày thuộc
đoạn [K1,K2] Hãy liệt kê tất cả các cách lập lịch tốt, với mỗi lịch in ra trên
một dòng một xâu nhị phân độ dài n với bit 0/1 tương ứng là nghỉ/làm việc.
Các xâu phải được in ra theo thứ tự từ điển.
/*
Một y tá cần lập lịch làm việc trong N ngày, mỗi ngày chỉ có thể là làm việc hay nghỉ ngơi.
Một lịch làm việc là tốt nếu không có hai ngày nghỉ nào liên tiếp và mọi chuỗi ngày tối đại làm việc
liên tiếp đều có số ngày thuộc đoạn [K1,K2].
Hãy liệt kê tất cả các cách lập lịch tốt, với mỗi lịch in ra trên một dòng một xâu nhị phân độ dài n
với bit 0/1 tương ứng là nghỉ/làm việc.
*/
#include<bits/stdc++.h>
// neu ngay nay nghi -> kiem tra ngay truoc do, neu da nghi thi khong duoc nghi nua
if(x[a-1] == 0) return false; //Nếu mà ngày a-1 cũng nghỉ thì trả về false
if(n-a+1 < k1) return false; //Nếu số ngày còn lại không thuộc đoạn [k1,k2] thì trả về false
if(so1>=k2) return false; //Nếu số ngày còn lại không thuộc đoạn [k1,k2] thì trả về false
void solution(){
for(int i=0; i<=1; i++){ //Thử với ngày i làm việc hoặc không
int pre = so1; //Lưu lại số ngày làm việc liên tiếp (lvlt) trước đó
if(x[a-1] == 1) so1++; //Nếu ngày a-1 cũng làm thì tăng số ngày lvlt lên
int main(){
return 0;
/*
Khoảng cách Hamming giữa hai xâu cùng độ dài là số vị trí mà ký tự tại vị trí đó là khác nhau trên
hai xâu.
Cho S là xâu gồm n ký tự 0. Hãy liệt kê tất cả các xâu nhị phân độ dài n, có khoảng cách Hamming
với S bằng H.
*/
#include<bits/stdc++.h>
//Hàm nhập giá trị đầu vào //Truong Hoang Phu 20215628
void input(){
//Hàm kiểm tra khoảng cách Hamming //Truong Hoang Phu 20215628
void solution(){
cout<<endl;
//Hàm quay lui sinh xâu hợp lệ //Truong Hoang Phu 20215628
int main(){
thúc tại điểm cuối cùng trong danh sách mà họ đưa ra, và có tổng khoảng
cách đi lại là nhỏ nhất.
/*
Superior là một hòn đảo tuyệt đẹp với n địa điểm chụp ảnh và các đường một chiều nối các điểm
chụp ảnh với nhau.
Đoàn khách tham quan có r người với sở thích chụp ảnh khác nhau. Theo đó, mỗi người sẽ đưa ra
danh sách các địa điểm mà họ muốn chụp.
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
Bạn cần giúp mỗi người trong đoàn lập lịch di chuyển sao cho đi qua các điểm họ yêu cầu đúng
một lần, không đi qua điểm nào khác,
bắt đầu tại điểm đầu tiên và kết thúc tại điểm cuối cùng trong danh sách mà họ đưa ra, và có tổng
khoảng cách đi lại là nhỏ nhất.
*/
#include <bits/stdc++.h>
int curr;
int best;
int cmin = INT_MAX; //Chi phí đi lại nhỏ nhất giữ hai thành phố khác nhau
void init(){
curr = 0;
best = INT_MAX;
return 1; //Trả về 1
for(int y = 1; y < leng ; y++){ //Duyệt theo từng địa điểm muốn đi
if (curr + c[place[y]][place[leng]] < best){ //Nếu chi phí nhỏ hơn chi phí nhỏ nhất
else
if (curr + cmin * (leng - k - 1) < best ) process(k + 1); //Nếu chưa tìm được
chi phí nhỏ nhất, tìm thành phố tiếp theo
void print() {
int main() {
string person[r + 1]; //String lưu lại địa điểm từng người muốn đi
cmin = (cmin > c[i][j])? c[i][j]:cmin; //Lưu lại chi phí đi lại nhỏ nhất giữa hai thành phố
ij
//Cắt chuỗi chuỗi person[j] thành từng số và lưu lại vào vector a
stringstream ss;
ss<<person[j];
vector<int> a;
while(!ss.eof()){
int x;
ss >> x;
a.push_back(x);
return 0;
IT3040 – 2023.1 – Mã lớp TH: 732826
Trương Hoàng Phú - 20215628
/*
Cho đồ thị vô hướng G, hãy đếm số đường đi đi qua k cạnh và không đi qua đỉnh nào quá một lần.
*/
#include<bits/stdc++.h>
void input(){
vt.resize(n+1); //Đặt kích thước vector lưu cạnh theo đỉnh là n+1
//Hàm kiểm tra xem có đường đi từ a đến i không //Truong Hoang Phu 20215628
if(i == vt[x[a-1]][j]) index++; //Nếu có đỉnh kề thì tăng giá trị index
else TRY(a+1); //Nếu không thì gọi đệ quy tìm đường khác
int main(){