Vận dụngCâu hỏi 1. Cho dãy số A = A[0], A[1]. .... A[n — 1]. Thiết kế và viết chương trình kiểm tra...

Câu hỏi:

Vận dụng

Câu hỏi 1. Cho dãy số A = A[0], A[1]. .... A[n — 1]. Thiết kế và viết chương trình kiểm tra trong dãy A có hai phân tử nào trùng nhau hay không. Cần đưa ra câu trả lời là “có” hay “không”. Yêu cầu đưa ra quy trình thiết kế theo phương pháp làm mịn dần.

Câu trả lời:
Người trả lời: GV. Đỗ Đăng Hưng
Để giải quyết bài toán trên, chúng ta có thể sử dụng phương pháp duyệt từng phần tử trong dãy và kiểm tra xem phần tử đó đã xuất hiện trước đó chưa. Dưới đây là một số cách để thực hiện:

Cách 1:
- Khởi tạo một mảng hash_set để lưu trữ các phần tử đã xuất hiện.
- Duyệt từng phần tử trong mảng A, nếu phần tử đó đã tồn tại trong hash_set thì trả về "có" (tức là có hai phần tử trùng nhau), ngược lại thì thêm phần tử đó vào hash_set.
- Sau khi duyệt hết mảng A mà không có phần tử nào trùng nhau, trả về "không".

Cách 2:
- Sắp xếp mảng A.
- Duyệt từng phần tử trong mảng A, nếu phần tử đó trùng với phần tử liền sau nó thì trả về "có".
- Nếu không có phần tử nào trùng nhau sau khi duyệt hết mảng A, trả về "không".

Cách 3:
- Sử dụng hàm find_index như đã được cung cấp.
- Duyệt từng phần tử trong mảng A và gọi hàm find_index để tìm xem phần tử đó đã xuất hiện trước đó chưa. Nếu hàm trả về giá trị khác -1 thì đó là phần tử trùng nhau và trả về "có".

Ví dụ cụ thể với cách 1 (sử dụng hash_set):

```cpp
#include
#include
using namespace std;

bool checkDuplicates(int A[], int n) {
unordered_set hash_set;
for (int i = 0; i < n; i++) {
if (hash_set.find(A[i]) != hash_set.end()) {
return true; // Phát hiện phần tử trùng nhau
}
hash_set.insert(A[i]);
}
return false; // Không có phần tử trùng
}

int main() {
int A[] = {1, 2, 3, 4, 5, 2};
int n = sizeof(A) / sizeof(A[0]);

if (checkDuplicates(A, n)) {
cout << "Có";
} else {
cout << "Không";
}

return 0;
}
```

Câu trả lời cho câu hỏi trên là: "Có".
Bình luận (0)
Nhấn vào đây để đánh giá
Thông tin người gửi
0.10833 sec| 2244.961 kb