Đếm Số Phần Tử Trong Mảng C
Có thể bạn quan tâm
Hướng dẫn các cách đếm số phần tử trong mảng C. Bạn sẽ học được cách đếm số phần tử giống nhau trong mảng C, cách đếm số phần tử khác nhau trong mảng C, cách đếm số lần xuất hiện của một phần tử trong mảng C cũng như cách đếm số lần xuất hiện của các phần tử trong mảng C sau bài học này.
Chúng ta có 4 cách đếm số phần tử trong mảng C như sau:
- Đếm số phần tử giống nhau trong mảng C
- Đếm số phần tử khác nhau trong mảng C
- Đếm số lần xuất hiện của một phần tử trong mảng C
- Đếm số lần xuất hiện của các phần tử trong mảng C
Đếm số phần tử giống nhau trong mảng C
Để đếm số phần tử giống nhau trong mảng C, chúng ta cần phải xác định được các phần tử giống nhau tồn tại trong mảng đó.
Để lấy phần tử giống nhau trong mảng C, chúng ta sẽ dùng tới hàm tự tạo mà Kiyoshi đã hướng dẫn trong bài:
- Xem thêm: Kiểm tra và lấy phần tử trùng trong mảng C
Chúng ta sẽ biến tấu hàm này và viết hàm đếm số phần tử giống nhau trong 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");}/*Tạo hàm đếm số phần tử giống nhau trong mảng C*/int 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]) { //Tìm thấy phần tử giống nhau result[count]=array[i]; ++ count; } } } show_array(result,count); return count;}int main(void){ int array1[] = {1,2,3,3,2,5}; int array2[] = {1,1,2,3,2,5,5,8,9,6}; //Lấy phần tử trùng nhau int check1 = take_duplicate_element(array1,SIZE_OF_ARRAY(array1)); printf("So phan tu giong nhau: %d\n",check1); int check2 = take_duplicate_element(array2,SIZE_OF_ARRAY(array2)); printf("So phan tu giong nhau: %d\n",check2); return 0;} |
Kết quả phép đếm số phần tử giống nhau trong mảng C như sau:
| 2 3 So phan tu giong nhau: 21 2 5 So phan tu giong nhau: 3 |
Đếm số phần tử khác nhau trong mảng C
Để đếm số phần tử khác nhau trong mảng C, chúng ta đơn giản xóa đi tất cả các phần tử trùng trong mảng, rồi đếm số phần tử khác nhau còn lại trong mảng là xong.
Để 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:
- Xem thêm: Xóa phần tử trùng trong mảng C
Và dưới đây là cách đếm số phần tử khác nhau trong mảng C sử dụng phương pháp Xóa phần tử trùng trong mảng C đã được sắp xếp:
| #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 trong mảng C*/size_t array_unique(int* array, size_t size){ size_t end = 0; for (size_t i = 1; i < size; ++i) { if (array[i] != array[end]) { //Tìm thấy phần tử trùng nhau ++end; //Tăng dần vị trí đầu mảng để gán phần tử trùng nhau array[end] = array[i]; //Ghi đè phần tử trùng nhau vào vị trí đầu mảng } } show_array(array, end+1); return 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à đếm số phần tử khác nhau trong kết quả size_t size1 = array_unique(array1, SIZE_OF_ARRAY(array1)); printf("So phan tu khac nhau: %d\n", size1); size_t size2 = array_unique(array2, SIZE_OF_ARRAY(array2)); printf("So phan tu khac nhau: %d\n", size2); size_t size3 = array_unique(array3, SIZE_OF_ARRAY(array3)); printf("So phan tu khac nhau: %d\n", size3); return 0;} |
Kết quả phép đếm số phần tử giống nhau trong mảng C như sau:
| 2 4 6 7 8 9 So phan tu khac nhau: 62 6 7 So phan tu khac nhau: 37 So phan tu khac nhau: 1 |
Đếm số lần xuất hiện của một phần tử trong mảng C
Để đếm số lần xuất hiện của một phần tử trong mảng C, ví dụ như là đếm số lần xuất hiện của phần tử x trong mảng có n phần tử chẳng hạn, chúng ta đơn giản tạo một vòng lặp và so sánh phần tử đó với từng phần tử trong mảng xem có bao nhiêu phần tử trong mảng giống nó là xong.
Chúng ta viết hàm đếm số lần xuất hiện của một phần tử trong 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 đếm số lần xuất hiện của một phần tử trong mảng C*/int count_element_in_array(int* array, int size, int x){ int count = 0; for(int i=0;i<size;i++){ if(array[i]==x) //Tìm thấy phần tử giống x trong mảng thì cộng biến đếm count ++; } return count;}int main(void){ int array[] = { 7, 2, 6, 7, 4, 9, 8 }; int x = 7; int count = count_element_in_array(array, SIZE_OF_ARRAY(array) , x); printf("Phan tu %d xuat hien %d lan\n",x,count); x = 4; count = count_element_in_array(array, SIZE_OF_ARRAY(array) , x); printf("Phan tu %d xuat hien %d lan",x,count); return 0;} |
Kết quả phép đếm số lần xuất hiện của một phần tử trong mảng C như sau:
| Phan tu 7 xuat hien 2 lanPhan tu 4 xuat hien 1 lan |
Đếm số lần xuất hiện của các phần tử trong mảng C
Đây là bài toán Cho một mảng 1 chiều có n phần tử. Hãy đếm số lần xuất hiện của từng phần tử trong mảng.Ví dụ chúng ta có mảng sau
| int array= {1, 2, 3, 1, 3, 2, 4}; |
Khi đó, số 1 xuất hiện 2 lần, số 2 xuất hiện 2 lần, số 3 xuất hiện 2 lần, và số 4 chỉ xuất hiện 1 lần trong mảng đã cho.
Để đếm số lần xuất hiện của các phần tử trong mảng C, trước tiên chúng ta cần sắp xếp mảng đã cho theo thứ tự tăng dần hoặc giảm dần.
Khi đó, các phần tử trùng nhau (nếu có) sẽ nằm cạnh nhau trong mảng. Và bằng phép so sánh một phần tử với một phần tử bên cạnh nó, nếu như chúng giống nhau thì chúng là phần tử trùng nhau, vầ chúng ta cần đếm chúng với số lần xuất hiện. Ngược lại nếu như một phần tử không giống với phần tử nằm cạnh nó, thì phần tử này chỉ tồn tại duy nhất 1 lần trong mảng mà thôi.
Để so sánh lần lượt như vậy, chúng ta cần sử dụng một vòng lặp để có thể tiến hành lấy lần lượt và so sánh từ đầu đến cuối mảng. Lưu ý là hai vị trí đầu mảng và cuối mảng do không có phần tử kế tiếp nào với nó để so sánh cả, nên chúng ta sẽ cần phải kiểm tra nó riêng.
Và chúng ta có thể tạo hàm đếm số lần xuất hiện của các phần tử trong mảng C 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 đếm số lần xuất hiện của các phần tử trong mảng C*/void array_unique(int* array, size_t size){ int count =1; for (size_t i = size-1; i > 0; --i) { //printf("Phan tu %d",array[i-1]); if (array[i] == array[i-1]) ++count; //Tìm thấy phần tử trùng nhau else{ printf("Phan tu %d xuat hien %d lan\n",array[i], count); count = 1; } } printf("Phan tu %d xuat hiẹn %d lan\n",array[0], count);}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); show_array(array1, SIZE_OF_ARRAY(array1)); //Đế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 đếm số lần xuất hiện của các phần tử trong mảng C như sau:
| 2 4 6 7 7 8 9 Phan tu 9 xuat hien 1 lanPhan tu 8 xuat hien 1 lanPhan tu 7 xuat hien 2 lanPhan tu 6 xuat hien 1 lanPhan tu 4 xuat hien 1 lanPhan tu 2 xuat hiẹn 1 lan |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn các cách đếm số phần tử 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/dem-so-phan-tu-trong-mang-c/
Từ khóa » Thuật Toán đếm Số Lần Xuất Hiện Trong C
-
Đếm Số Lần Xuất Hiện Của Các Phần Tử Trong Mảng C/C++
-
Đếm Số Lần Xuất Hiện Của Phần Tử Trong Mảng
-
C - Bài Tập 4.4: Đếm Số Lần Xuất Hiện Trong Mảng - YouTube
-
Cách Code đếm Số Lần Xuất Hiện Của Các Phần Tử Trong Mảng C/C++
-
Viết Hàm đếm Số Lần Xuất Hiện Phần Tử X Có Trong Mảng | How Kteam
-
CTDL Và Giải Thuật - Đếm Số Lần Xuất Hiện Của Các Số
-
Thuật Toán Đếm Số Lần Xuất Hiện Của Phần Tử Trong Mảng ...
-
Bài Tập C#: Đếm Số Lần Xuất Hiện Của Từng Phần Tử Trong Mảng ...
-
Đếm Số Lần Xuất Hiện Của Phần Tử Trong Mảng
-
Thuật Toán đếm Số Lần Xuất Hiện
-
Thuật Toán đếm Số Lần Xuất Hiện - Xechaydiendkbike
-
Đếm Số Lần Xuất Hiện Của Một Ký Tự Của Chuỗi Trong C
-
Thuật Toán đếm Số Lần Xuất Hiện