Bài tập về mảng 1 chiều c++ co dap an

Bài viết này mình sẽ hướng dẫn các bài tập liên quan tới tần suất và các giá trị khác nhau trong mảng.

NỘI DUNG

  • Đếm Các Phần Tử Khác Nhau
  • Liệt Kê Các Phần Tử Khác Nhau
  • Tần Suất Của Phần Tử Trong Mảng
  • Video Tutorial

main

1.Đếm Các Phần Tử Khác Nhau

Đếm các giá trị khác nhau trong mảng có nhiều thuật toán có thể giải quyết, trong bài này mình sẽ hướng dẫn các bạn cách giải quyết dễ tiếp cận nhất.

Trong các bài sau mình sẽ hướng dẫn thêm các phương pháp khác tối ưu hơn.

Thuật toán :

  1. Duyệt qua các phần tử trong mảng từ chỉ số 0 tới N - 1
  2. Đối với mỗi chỉ số i bạn cần xét các phần tử trong đoạn từ [0, i - 1], nếu chưa có phần tử nào trong đoạn trước chỉ số i bằng với phần tử ở chỉ số i thì ta sẽ có thêm 1 phần tử khác nhau trong mảng

Ví dụ mảng A[] = {1, 3, 4, 5, 5, 2, 4, 8, 1, 2, 3}

Xét chỉ số i = 4, khi đó A[i] = 5 và các phần tử trong đoạn trước A[i] là {1, 3, 4, 5} ta thấy A[i] bằng với 1 phần tử trong đoạn trước nó nên sẽ không đếm thêm 1 giá trị khác nhau trong mảng.

Xét chỉ số i = 5, khi đó A[i] = 2 và các phần tử đứng trước A[i] là {1, 3, 4, 5, 5,} không có phần tử nào giống với A[i] nên khi A[i] xuất hiện ta sẽ có thêm 1 giá trị khác nhau trong mảng.

Code :

include "stdio.h"

include "math.h"

int main(){

int n = 10;  
int a[10] = {1, 3, 4, 5, 5, 2, 4, 1, 2, 3};  
int res = 0;  
for(int i = 0; i < n; i++){  
    int check = 1;  
    for(int j = 0; j < i; j++){  
        if(a[i] == a[j]){  
            check = 0;  
            break;  
        }  
    }  
    if(check == 1){  
        ++res;  
    }  
}  
printf("So luong gia tri khac nhau trong mang : %d\n", res);  
return 0;  
}

Output :

So luong gia tri khac nhau trong mang : 5


2. Liệt Kê Các Giá Trị Khác Nhau Trong Mảng

Thuật toán để liệt kê các giá trị khác nhau trong mảng bạn tương tự như thuật toán trong mục 1, ở đây mình liệt kê theo thứ tự xuất hiện trong mảng.

Nếu bạn muốn liệt kê theo thứ tự từ bé đến lớn thì bạn cần sắp xếp mảng trước khi áp dụng thuật toán này.

Code :

include "stdio.h"

include "math.h"

int main(){

int n = 10;  
int a[10] = {1, 3, 4, 5, 5, 2, 4, 1, 2, 3};  
for(int i = 0; i < n; i++){  
    int check = 1;  
    for(int j = 0; j < i; j++){  
        if(a[i] == a[j]){  
            check = 0;  
            break;  
        }  
    }  
    if(check == 1){  
        printf("%d ", a[i]);  
    }  
}  
return 0;  
}

Output :

1 3 4 5 2


3. Tần Suất Của Phần Tử Trong Mảng

Bài toán yêu cầu các bạn liệt kê các giá trị xuất hiện trong mảng kèm theo số lần xuất hiện của nó.

Thuật toán giải quyết bài này tương tự với ở mục 1, mình sẽ hướng dẫn các bạn 2 cách. Cách 1 không dùng thêm mảng phụ và cách 2 thì cần thêm 1 mảng phụ để truy vết.