Professional Documents
Culture Documents
Table of Contents
Bài thực hành số 1 – Tuần 31..................................................................................................4
Bài tập 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......................................................................................................................................4
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).................................................................................................................................................5
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ể................................................................................................................................9
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.........................................................................................................................12
Bài 3.5. Tính hệ số tổ hợp C(n, k)....................................................................................................15
Bài 3.6. Tìm ước chung lớn nhất của hai số nguyên a, b cho trước..................................................18
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....................................................................................................................20
Bài 3.8. Bạn đang muốn kiểm tra xem một vật cho trước có đúng nặng 𝑀� như người ta nói hay
không. Có một cân thăng bằng và 𝑛� quả cân. Quả thứ 𝑖� nặng 𝑚𝑖��. Hãy chỉ ra một cách cân
thỏa mãn. Quy cách in ra đã được tích hợp trong mã nguồn dưới..................................................21
Bài 3.9. Một y tá cần lập lịch làm việc trong 𝑁� 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 [𝐾1,𝐾2][�1,�2]. 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 𝑛� 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...................................................................................21
Bài 3.10. 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 𝑆� là xâu gồm 𝑛� ký tự 0. Hãy liệt kê tất cả các xâu nhị phân độ dài 𝑛�,
có khoảng cách Hamming với 𝑆� bằng 𝐻�. Các xâu phải được liệt kê theo thứ tự từ điển..........21
Bài 3.11. Superior là một hòn đảo tuyệt đẹp với 𝑛� đị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ó 𝑟� 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. 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........................................................................................22
Bài 3.12. Cho đồ thị vô hướng 𝐺�, hãy đếm số đường đi đi qua 𝑘� cạnh và không đi qua đỉnh nào
quá một lần....................................................................................................................................22
Bai 3.1
#include<stdio.h>
int lucas(int n) {
if(n==0) return 2;
if(n==1) return 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).
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int n;
int a[100][100]; //toa do cac diem
int X[100], Y[100];
void print() {
for(int j = 1; j <= n*n; ++j) {
printf("(%d %d)\n", X[j], Y[j]);
}
exit(0);
}
void TRY(int k) {
for(int i = 0; i < 8; i++) {
int x1 = X[k-1] + hx[i];
int y1 = Y[k-1] + hy[i];
if(a[x1][y1] != 1 && 1 <= x1 && x1 <= n && 1 <= y1 && y1 <= n) { //Kiem tra
dieu kien co the di chuyen cua quan ma
a[x1][y1] = 1; //cap nhat diem do da duoc di qua
X[k] = x1;
Y[k] = y1;
if(k==n*n) print();
else TRY(k+1);
a[x1][y1] = 0; //de kiem tra cac nuoc co the co con lai
}
}
}
int main() {
scanf("%d", &n);
a[1][1] = 1;
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define MAX 100
}
}
}
int main() {
input();
x[1] = 1;
TRY(2);
#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) {
int res = 1;
if(a[j]<a[i]){
mem[i]=res;
return res;
trace(j);
break;
int main(){
init();
cin >> n;
res = lis(i);
pos = i;
trace(pos);
return 0;
#include <iostream>
int main() {
int m;
cin >> m;
for (int n = 1; n <= m; ++n){
for (int k = 0; k <= n; ++k)
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << gcd(a, b) << endl << gcd2(a, b);
return 0;
}
Bài 3.8. Bạn đang muốn kiểm tra xem một vật cho trước có đúng nặng 𝑀� như người ta
nói hay không. Có một cân thăng bằng và 𝑛� quả cân. Quả thứ 𝑖� nặng 𝑚𝑖��. Hãy
chỉ ra một cách cân thỏa mãn. Quy cách in ra đã được tích hợp trong mã nguồn dưới.
Bài 3.9. Một y tá cần lập lịch làm việc trong 𝑁� 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 [𝐾1,𝐾2][�1,�2]. 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 𝑛� 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
Bài 3.10. 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 𝑆� là xâu gồm 𝑛� ký tự 0. Hãy liệt kê tất cả các xâu
nhị phân độ dài 𝑛�, có khoảng cách Hamming với 𝑆� bằng 𝐻�. Các xâu phải được
liệt kê theo thứ tự từ điển
Bài 3.12. Cho đồ thị vô hướng 𝐺�, hãy đếm số đường đi đi qua 𝑘� cạnh và không đi
qua đỉnh nào quá một lần.