Liệt kê các phần tử xuất hiện trong mảng C | Laptrinhcanban.com

HOME › >>

Liệt kê các phần tử xuất hiện trong mảng C

Hướng dẫn cách liệt kê các phần tử xuất hiện trong mảng C. Bạn sẽ học được cách liệt kê các phần tử xuất hiện một lần trong mảng C, cũng như cách liệt kê các phần tử xuất hiện nhiều hơn 1 lần sau bài học này.

Liệt kê các phần tử duy nhất trong mảng C

Để liệt kê các phần tử duy nhất trong mảng C, chúng ta cần xóa đi tất cả các phần tử trùng trong mảng ban đầu. Khi đó kết quả còn lại chính là các phần tử duy nhất có trong mảng đó.

Để xóa phần tử trùng trong mảng C, chúng ta sẽ sử dụng tới một trong 2 cách mà Kiyoshi đã hướng dẫn trong bài:

Và dưới đây là cách liệt kê các phần tử duy nhất trong mảng C thông qua việc xoá phần tử trùng trong một mảng đã được sắp xếp như sau:

#include <stdio.h>
#include <stdlib.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Tạo hàm so sánh tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b)
{
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}

/*Tạo hàm xoá phần tử trùng lặp trong mảng đã sắp xếp*/
void array_unique(int* array, size_t size){
size_t end = 0;

for (size_t i = 1; i < size; ++i) {
if (array[i] != array[end]) {
++end;
array[end] = array[i];
}
}
//Liệt kê các phần tử xuất hiện một lần trong mảng C
show_array(array, end+1);
}

int main(void){
int array1[] = { 7, 2, 6, 7, 4, 9, 8 };
int array2[] = { 7, 2, 6, 7, 7 };
int array3[] = { 7, 7, 7 };

// Sắp xếp các mảng theo thứ tự tăng dần
qsort(array1, SIZE_OF_ARRAY(array1), sizeof(int), compareIntAsc);
qsort(array2, SIZE_OF_ARRAY(array2), sizeof(int), compareIntAsc);
qsort(array3, SIZE_OF_ARRAY(array3), sizeof(int), compareIntAsc);

//Xoá phần tử trùng nhau và liệt kê các phần tử duy nhất
array_unique(array1, SIZE_OF_ARRAY(array1));
array_unique(array2, SIZE_OF_ARRAY(array2));
array_unique(array3, SIZE_OF_ARRAY(array3));

return 0;
}

Kết quả phép liệt kê các phần tử duy nhất trong mảng Cnhư sau:

2 4 6 7 8 9 
2 6 7
7

Liệt kê các phần tử xuất hiện một lần trong mảng C

Để liệt kê các phần tử xuất hiện một lần trong mảng C, chúng ta đơn giản kiểm tra từng phần tử xem có phần tử nào trùng với nó trong mảng ban đầu hay không.

Chúng ta có thể sử dụng vòng lặp để lấy và kiểm tra từng phần tử và liệt kê các phần tử xuất hiện một lần trong mảng C như sau đây:

#include <stdio.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm liệt kê các phần tử xuất hiện một lần trong mảng C*/
void array_unique(int* array, size_t size){
for (size_t i = 0; i < size; ++i) {
size_t count = 0;

for (size_t j = 0; j < size; ++j) {

if (array[i] == array[j] &i!=j) {
//Tìm thấy phần tử trùng nhau thì tăng biến đếm
count += 1;
}
}
/*Nếu count vẫn bằng 0 thì phần tử đang kiểm tra
chỉ xuất hiện 1 lần duy nhất trong mảng*/
if(count==0) printf("%d ",array[i]);
}
printf("\n");
}

int main(void){
int array1[] = { 7, 2, 6, 7, 4, 9, 8 };
int array2[] = { 7, 2, 6, 7, 7 };
int array3[] = { 7, 7, 7 };


//Xoá phần tử trùng nhau và liệt kê các phần tử xuất hiện một lần trong kết quả
array_unique(array1, SIZE_OF_ARRAY(array1));
array_unique(array2, SIZE_OF_ARRAY(array2));
array_unique(array3, SIZE_OF_ARRAY(array3));

return 0;
}

Kết quả phép liệt kê các phần tử xuất hiện một lần trong mảng Cnhư sau:

2 6 4 9 8 
2 6

Liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C

Các phần tử xuất hiện nhiều hơn 1 lần trong mảng C chính là các phần tử trùng nhau.

Để liệt kê các xuất hiện nhiều hơn 1 lần này, chúng ta sẽ dùng tới hàm tự tạo mà Kiyoshi đã hướng dẫn trong bài:

Và chúng ta viết hàm liệt kê các phần tử xuất hiện nhiều hơn 1 lần mảng C trong chương trình như sau:

#include <stdio.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Thay đổi hàm kiểm tra phần tử trùng nhau ở phương pháp một*/
/*Và tạo hàm lấy phần tử trùng trong mảng C*/
void take_duplicate_element(const int* array, size_t size){
int result[100], count=0;

for (size_t i = 0; i < size - 1; ++i) {
for (size_t j = i + 1; j < size; ++j) {
if (array[i] == array[j]) {
result[count]=array[i];
++ count;
}
}
}
//liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C
show_array(result, count);
}

int main(void){
int array1[] = {1,2,3,3,2,5};
int array2[] = {1,1,2,3,2,5,5,8,9,6};

//liệt kê các phần tử xuất hiện nhiều hơn 1 lần trong mảng C
take_duplicate_element(array1,SIZE_OF_ARRAY(array1));
take_duplicate_element(array2,SIZE_OF_ARRAY(array2));

return 0;
}

Kết quả phép liệt kê các phần tử xuất hiện nhiều hơn 1 lần mảng C như sau:

2 3 
1 2 5

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách liệt kê các phần tử xuất hiện trong mảng C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/c/lap-trinh-c-co-ban/mang-trong-c/liet-ke-cac-phan-tu-xuat-hien-trong-mang-c/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.