Bạn chưa đăng nhập. Vui lòng đăng nhập để hỏi bài
DƯƠNG GIA BẢO

viết chương trình nhập vào số nguyên n và dãy số A1,A2,...An. loại khỏi dãy các phần tử giống nhau(dùng map nhé, không dùng vector) C++. 

Khánh My
25 tháng 12 2024 lúc 20:35

Trình bày vài nét về chế độ phân  biệt chủng tộc ở Châu Phi

Nguyễn Gia Bảo
25 tháng 12 2024 lúc 20:38

Chương trình C++ sau đây nhập vào số nguyên n và dãy số A1, A2, ..., An, loại bỏ các phần tử giống nhau trong dãy và in ra dãy kết quả sử dụng `std::map`.  Lưu ý rằng `std::map` tự động sắp xếp các khóa (trong trường hợp này là các phần tử của dãy), nên thứ tự các phần tử trong dãy đầu ra có thể khác với dãy đầu vào. Nếu cần giữ nguyên thứ tự, bạn nên sử dụng `std::unordered_map`.

```cpp
#include <iostream>
#include <map>

using namespace std;

int main() {
  int n;
  cout << "Nhập số lượng phần tử n: ";
  cin >> n;

  map<int, int> count; // Sử dụng map để đếm số lần xuất hiện của mỗi phần tử
  int a;

  cout << "Nhập các phần tử của dãy: ";
  for (int i = 0; i < n; ++i) {
    cin >> a;
    count[a]++; // Tăng số lần xuất hiện của phần tử a
  }

  cout << "Dãy sau khi loại bỏ phần tử trùng lặp: ";
  for (auto const& [key, val] : count) {
    cout << key << " "; // In ra các khóa (phần tử duy nhất)
  }
  cout << endl;

  return 0;
}
```

**Giải thích:**

1. **`#include <iostream>`:** Thêm thư viện đầu vào/xuất.
2. **`#include <map>`:** Thêm thư viện `map`.
3. **`map<int, int> count;`:** Khai báo một `map` có khóa là kiểu `int` (phần tử của dãy) và giá trị là kiểu `int` (số lần xuất hiện).
4. **`count[a]++;`:**  Mỗi khi gặp một phần tử `a`, tăng giá trị tương ứng trong `map` lên 1.  Nếu `a` chưa có trong `map`, nó sẽ được thêm vào với giá trị 1.
5. **`for (auto const& [key, val] : count)`:** Duyệt qua `map`. `key` là phần tử của dãy, `val` là số lần xuất hiện.  Chỉ cần in ra `key` để có được dãy không trùng lặp.

**Ví dụ:**

Nếu nhập vào:

`n = 7`
`A = {1, 2, 2, 3, 4, 4, 4}`

Kết quả đầu ra sẽ là:

`Dãy sau khi loại bỏ phần tử trùng lặp: 1 2 3 4 `

**Để giữ nguyên thứ tự:**

Nếu bạn cần giữ nguyên thứ tự các phần tử trong dãy đầu ra, bạn cần sử dụng `std::unordered_map` và một `vector` để lưu trữ các phần tử duy nhất theo thứ tự ban đầu.  Đây là một ví dụ:


```cpp
#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

int main() {
  // ... (nhập n và dãy A như trên) ...

  unordered_map<int, int> seen;
  vector<int> unique_elements;

  for (int i = 0; i < n; ++i) {
    if (seen.find(a) == seen.end()) {
      seen[a] = 1;
      unique_elements.push_back(a);
    }
  }

  cout << "Dãy sau khi loại bỏ phần tử trùng lặp (giữ nguyên thứ tự): ";
  for (int element : unique_elements) {
    cout << element << " ";
  }
  cout << endl;

  return 0;
}
```

Phiên bản này sử dụng `unordered_map` để kiểm tra nhanh chóng xem một phần tử đã được gặp trước đó hay chưa và `vector` để lưu trữ các phần tử duy nhất theo thứ tự xuất hiện ban đầu.

Nguyễn Thị Cúc Hoa
30 tháng 12 2024 lúc 14:43

#include <iostream>

#include <map>

using namespace std;

int main() {
    int n;
    cout << "Nhập vào số lượng phần tử n: ";
    cin >> n; 
    map<int, int> m;  
    cout << "Nhập vào dãy số A1, A2, ..., An:" << endl;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        m[x] = 1;
    }  
    cout << "Dãy số sau khi loại bỏ phần tử trùng lặp: ";
    for (auto& pair : m) {
        cout << pair.first << " "; 
    }
    cout << endl;    
    return 0;
}


Các câu hỏi tương tự
Như Quỳnh
Xem chi tiết
huynh chinh
Xem chi tiết
Bảo Lê Nguyễn Vũ
Xem chi tiết
Hello1234
Xem chi tiết
TRIẾT PHẠM
Xem chi tiết
89654DAUUBUOIIIII956
Xem chi tiết
Lê Gia Huy
Xem chi tiết
trần anh khoa
Xem chi tiết
Noelle
Xem chi tiết
Logan
Xem chi tiết