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

  -  
Mình có bài tập như sau: "Nhập vào một mảng số nguyên n từ bàn phím, in ra màn hình phần tử có số lần lặp nhiều nhất trong mảng vừa lập."VD: Mảng có 5 phần tử 2,2,1,1,3 in ra là: phần tử 1 và 2 lặp nhiều nhất (2 lần). Mình đã làm bài tập này nhưng với mảng như trên chương trình chỉ hiện ra: phần tử 2 lặp nhiều nhất (2 lần). Các bạn có thể giúp mình sửa lại code để đúng trong trường hợp trên không? Mình cảm ơn.


Bạn đang xem: Tìm phần tử xuất hiện nhiều nhất trong mảng

#include main(){ int i,n,j,name,dem<100>,a<100>,max; printf("Nhap vao so phan tu cua mang: "); scanf("%d",&n); for (i=0;i
*
*
Trả lời cùng với trích dẫn
*

Thành viên chính thức
*

*



Xem thêm: Top Game Siêu Nhân Hay Nhất Mà Các Fan Không Nên Bỏ Qua, Game Siêu Nhân 24H

Thành viên nhiệt tình
*

mình có ý tưởng như thế này bạn code theo C nhá , mình không quen C lắm nên phải code theo C++ !thuật toán là :ban đầu cậu sắp xếp lại mảng theo quick sort nhá ( cái này độ phức tạp có 0(nlogn) thôi )sau khi sắp xếp xong bạn dùng 1 biến đếm chạy và 1 biến là kết quả lớn nhất và so sánh nếu mà 2 phần tử khác nhau thì gán lại biến đếm = 1 , không thì tăng lên 1 cứ thế cho đến hết mảng và so sánh với biến kết quả lớn nhất và gán cho nó;sau khi có được số lần xuất hiện nhiều nhất rồi thì bạn duyệt lại 1 lần nữa để xem những phần tử nào có cùng với số lần xuất hiện max !( bài toán này tớ làm với độ phức tạp là 0(nlogn) thôi ,còn theo cách của cậu là 0 (n^2 ))
#include#include#includevoid nhap(int* a,int& n);void xuat(int* a,int n);void timsolanlapnhieunhat(int* a,int n);int tim(int* a,int n,int x);void swap(int& a,int& b);int main(){int n;printf("\n Nhap vao so phan tu cua mang: ");scanf("%d",&n);int* a=(int*)malloc(n*sizeof(int));nhap(a,n);xuat(a,n);printf("\n mang cac phan tu khac nhau \n");timsolanlapnhieunhat(a,n);getch();return 0;}void nhap(int* a,int& n){int i;for(i=0;i
Bài này cách giải dễ nhất là sắp xếp mảng.Tuy nhiên, nếu không muốn sắp sếp thì có thif dùng thủ thuật đếm dồn
, thủ thuât hơi rắc rối nhưng không độ phức tạp không đến nổi lớn như thủ thuật đếm đầy đủTheo kỹ thuật đếm dồn, nếu mảng a có k phần tử mang giá trị x thì phần tử x đầu tiên được đếm là 1, phần tử x thứ hai được đếm là 2, vv... và phần tử x thứ k được đếm là k.Giải thuật:- Mảng mang có n phần tử- Tạo mang dem cũng n phần tử, mọi giá trị = 1- Đọc mảng mang. Cứ mỗi phần tử thì lại tìm đến cuối mảng, gặp trị giống thì cộng số đếm vào phần tử tương ứng trên mảng đếmNhư vậy, nếu ta có mảnga = { 1, 1, 3, 4, 7, 5, 1, 3, 9 }Thì sau khi duyệt xong, ta sẽ có mảngd = { 1, 2, 1, 1, 1, 1, 3, 2, 1 }Mảng d cho thấy, phần tử nhiều nhất là phần tử thứ 7, với 3 lần lặp lại.


Xem thêm: Tải Võ Lâm Chi Mộng Mobile, Cho Điện Thoại Android, Ios, Apk, Võ Lâm Chi Mộng

Quick NavigationThắc mắc lập trình C/C++/C++0xTopCác khu vực của siteCác diễn đànCỘNG ĐỒNG C VIỆTĐỊNH HƯỚNG, ĐÀO TẠO & VIỆC LÀM NGÀNH CNTTLẬP TRÌNH VISUAL C#LẬP TRÌNH OBJECTIVE-CLẬP TRÌNH JAVALẬP TRÌNH VISUAL C++ | LẬP TRÌNH VISUAL C++.NETLẬP TRÌNH C++ | LẬP TRÌNH C | LẬP TRÌNH C++0XLẬP TRÌNH TRÊN LINUX | LINUX PROGRAMMINGDATABASE & REPORTING | CÁC HỆ QUẢN TRỊ DATABASETHÀNH VIÊN CỘNG ĐỒNG C VIỆTTHẢO LUẬN CHUNGCHUYÊN MỤC GIẢI TRÍ