Tìm phần tử xuất hiện nhiều nhất trong mảng C | Laptrinhcanban.com

Tìm phần tử xuất hiện nhiều nhất trong mảng C

Hướng dẫn cách tìm phần tử xuất hiện nhiều nhất trong mảng C. Bạn sẽ học được cách tạo hàm tìm phần tử xuất hiện nhiều nhất trong mảng C sau bài học này.

Tìm phần tử xuất hiện nhiều nhất trong mảng C

Để tìm phần tử xuất hiện nhiều nhất trong mảng C, chúng ta cần phải đếm số lần xuất hiện của các phần tử trong mảng đó. Sau đó thì so sánh và chọn ra phần tử có số lần xuất hiện nhiều nhất trong mảng là xong.

Để đếm số lần xuất hiện của các phần tử trong mảng, chúng ta sẽ dùng tới hàm tự tạo mà Kiyoshi đã hướng dẫn trong bài: Đếm số phần tử trong mảng C.

Và để tìm max trong mảng kết quả, chúng ta sẽ dùng tới logic mà Kiyoshi đã hướng dẫn trong bài: Tìm max và min trong mảng C

Và chúng ta biến tấu hàm đếm số lần xuất hiện của các phần tử trong mảng để viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng C trong chương trình như sau:

#include <stdio.h>
#include <stdlib.h>
#include <assert.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 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;
}

/*Biến tấu hàm đếm số lần xuất hiện của các phần tử
và tạo hàm tìm phần tử xuất hiện nhiều nhất trong mảng C*/
void array_unique(int* array, size_t size){
//Khởi tạo mảng max chứa kết quả
//max[0] : phần tử xuất hiện nhiều nhất
//max[1] : số lần xuất hiện của phần tử đó
int max[] ={0,0};

//Sử dụng vòng lặp for để lọc ra các phần tử xuất hiện nhiều hơn 1 lần
//So sánh số lần xuất hiện và thay đổi max khi cần.
int count =1;
for (size_t i = size-1; i > 0; --i) {
if (array[i] == array[i-1]) ++count; //Thấy phần tử trùng nhau thì tiếp tục đếm
else{
//So sánh số lần xuất hiện với max[1]
if (max[1] < count){
//Nếu tìm thấy phần tử xuất hiện nhiều hơn thì gán phần tử vào max[0]
//Và gán số lần xuất hiện vào max[1]
max[0] = array[i];
max[1] = count;
}
count = 1;
}
}
printf("Phan tu %d xuat hien nhieu nhat trong mang voi %d lan\n", max[0], max[1]);
}

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

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

//Đếm số lần xuất hiện của các phần tử trong mảng C
array_unique(array1, SIZE_OF_ARRAY(array1));

return 0;
}

Kết quả phép tìm phần tử xuất hiện nhiều nhất trong mảng C như sau:

Phan tu 7 xuat hien nhieu nhat trong mang voi 2 lan

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.

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.