Bài tập Tuần 2 Câu 1 Cho một dãy số nguyên , hãy viết chương trình tìm chỉ số của phần tử lớn thứ hai với độ phức tạp O(n) Ví dụ Cho dãy số nguyên S = {1, 9, 11, 6, 2, 21, 15, 5} Phần tử lớn thứ hai l[.]
Trang 1Bài tập Tuần 2
Câu 1: Cho một dãy số nguyên , hãy viết chương trình tìm chỉ số của phần tử lớn thứ hai
với độ phức tạp O(n)
Ví dụ : Cho dãy số nguyên S = {1, 9, 11, 6, 2, 21, 15, 5}: Phần tử lớn thứ hai là 15 có chỉ số
là 6
Câu 2: Cho dãy số nguyên dương {Fn} được định nghĩa như sau (với a là số nguyên dương tham gia vào dữ liệu nhập):
F1 = a
F2 = 18a2 + 10
Fn+1 = 18Fn + 10Fn-1 với n>1
Với mỗi giá trị cụ thể của a, ta tính được dãy số {Fn} cụ thể
a) Cho a = 2, hãy tính giá trị F3 và F4
b) Cho số nguyên dương a Hãy viết hàm đệ qui để tính giá trị của Fn với mọi n nguyên dương
c) Viết hàm tính Fn không dùng đệ qui
d) Phương pháp tính Fn theo đệ qui Câu a), tính Fn không dùng đệ qui Câu b): Phương pháp nào hiệu quả hơn? Tại sao?
Câu 3: Tìm phần tử trùng lặp đầu tiên trong DSLK đã cho Tìm phần tử đầu tiên từ bên trái
xuất hiện nhiều hơn một lần Nếu tất cả các phần tử là duy nhất thì in -1
Ví dụ:
Input: 1 2 3 4 3 2 1
Output: 1
Trong DSLK phần tử 1 xuất hiện 2 lần và nó là phần tử đầu tiên thoả điều kiện Vì thế trả lời là 1
Input: 1 2 3 4 5
Output: -1
Tất cả các phần tử là duy nhất Vì thế trả lời là -1
Hướng dẫn: Sử dụng kiểu dữ liệu trong C++ unordered_map<int, int>: Để lưu số lần xuất hiện của các phần tử trong dslk
Câu 4: Cho một tập S là dãy các số nguyên phân biệt, tìm phần tử d lớn nhất, với d=a+b+c,
với a,b,c và d là các phần tử phân biệt của S
.Điều kiện: 1 <= Số phần tử của tập S <= 1000
INT_MIN <= mỗi phần tử trong tập S <= INT_MAX
Ví dụ:
Input: S[] = {2, 3, 5, 7, 12}
Output: 12
Explaination: 12 là số d lớn nhất mà có thể biểu diễn như 12 = 2 + 3 + 7
Trang 2Câu 5: Cho một mảng chỉ chứa 0 và 1, tìm mảng con lớn nhất chứa số 0 và 1 bằng nhau Độ
phức tạp thời gian dự kiến O(n)
Ví dụ:
Input: arr[] = {1, 0, 1, 1, 1, 0, 0}
Output: 1 tới 6
Input: arr[] = {0, 0, 1, 1, 0}
Output: 0 tới 3 ; 1 tới 4