Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Tìm phần tử được lặp nhiều nhất trong mảng

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    8

    Red face Tìm phần tử được lặp nhiều nhất trong mảng

    Nhập 1 mảng các số nguyên ( int ) số lượng bất kì
    In ra (các) số được lặp nhiều nhất ( hãy sử dụng con trỏ - pointer )

    Các bác giúp coding với ! Thanks verry much.
    Đã được chỉnh sửa lần cuối bởi longbodie : 23-03-2008 lúc 01:44 PM.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Các bác giúp coding với ! Thanks verry much.
    Đọc nội qui chưa cậu ? Có muốn tôi code giúp thật không ?

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    153

    số được lặp nhiều nhất hay những số được lặp nhiều nhất ? Ví dụ các số có số lần lặp lớn nhất ngang nhau thì sao nhỉ ?

    VD : 123452356723

    ---> 2 , 3 là hai số lặp nhiều nhất .
    ttecak ?

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi comeonbaby Xem bài viết
    số được lặp nhiều nhất hay những số được lặp nhiều nhất ? Ví dụ các số có số lần lặp lớn nhất ngang nhau thì sao nhỉ ?

    VD : 123452356723

    ---> 2 , 3 là hai số lặp nhiều nhất .
    đúng bác ạ , in ra các số dc lặp nhiều nhất

    Ý tưởng mình dùng 2 vòng lặp for để kiểm tra từng phần tử này với các phần tử còn lại, nếu nó == nhau thì : nhớ số lần lặp của số đó và số đó , sau đó so sánh với số lần lặp của số khác , nếu nó >= thì nhớ số đó và số lần lặp lại
    Do trình còn non nên nghĩ ra mà không biết làm , nhất là chỗ nhớ số lần lặp của số đó và số đó không biết làm thế nào , các bác giúp với

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Ý tưởng mình dùng 2 vòng lặp for để kiểm tra từng phần tử này với các phần tử còn lại, nếu nó == nhau thì : nhớ số lần lặp của số đó và số đó , sau đó so sánh với số lần lặp của số khác , nếu nó >= thì nhớ số đó và số lần lặp lại
    Do trình còn non nên nghĩ ra mà không biết làm , nhất là chỗ nhớ số lần lặp của số đó và số đó không biết làm thế nào , các bác giúp với
    Ý tưởng cũng ok đó, thử code đơn giản xem sao đã.
    hãy sử dụng con trỏ - pointer
    Try cái trên trước, tui sẽ giúp !

  6. #6
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định Tìm phần tử được lặp nhiều nhất trong mảng

    Cái này có thể dùng single linked list . Khai báo 1 struct như sau:
    PHP Code:
    struct Node 
    {
        
    int value;//gia tri cua phan tu
        
    int count;//so lan xuat hien cua phan tu,ban dau gan la 0
        
    struct Nodenext;
    }; 
    .Sau đó bạn cứ duyệt các phần tử,nếu value trùng nhau thì tăng count lên.Rồi tìm Node có count max là được
    Cánh Chym ứ mỏi

  7. #7
    Ngày gia nhập
    12 2007
    Bài viết
    8

    Code đơn giản đây bác

    Code:
    cout<<"Please enter the numbers in the array:\n";
    	for(i=0;i<n;i++)
    		cin>>a[i];
    
    	
    	for(i=0;i<n;i++)
    	{
    		count=0;
    		for(j=0;j<n;j++)
    		{
    			if(a[i]==a[j])
    				count++;
    		}
    		if(count>large)
    		{
    			large=count;
    			num=a[i];
    		}
    	}
    	if(large>1)
    		cout<<"The number that appears most frequently is: "<<num;
    	else
    		cout<<"There is no number that occurs most frequently";
    	
    }
    code này nếu 2 số cùng lần lặp cao nhất thì nó chỉ in ra số cuối
    vd : mảng là 1 1 1 2 2 2 3 3 4 4 , thì nó hiện số lặp nhiều nhất là 2 ( trong khi 1 cũng lặp =2 )
    và chưa dùng pointer , chỉ dùng index , mấy anh cũng bảo kiểm tra mảng quá nhiều lần o cần thiết ???
    các bác giúp em update cái
    Đã được chỉnh sửa lần cuối bởi longbodie : 27-03-2008 lúc 03:40 PM. Lý do: add info

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Dạng bài này nói là làm cho bằng đc thì ko khó nhưng làm cho hoàn thiện thì cũng ko phải là chuyện dễ.Mình có 2 ý tưởng sau đây...chính mình đánh giá nó ko cao nhưng cũng mạnh dạn nêu ra để chia sẻ:

    + Cách Thứ nhất
    * sắp xếp lại mảng đó (sắp rồi thì OK) sau đó bạn duyệt mảng nếu các phần tử giống nhau thì dùng biến đếm để đếm.Cuối cùng cho ta biến đếm bằng số lần xuất hiện cùa các số xuất hiện nhiều nhất...Đặt cái này bằng demMax
    * Tiếp theo ta lại duyệt mảng một lần nữa và lại đếm như trên nhưng nếu cái nào đếm mà bằng demMax thì in ra liền...

    Chi phí : sắp xếp + 2 lần duyệt mảng

    +Cách Thứ hai :
    * Dùng một mảng có tên là dem[] để để đếm với cách thức như sau:
    Dem[i] = số lần xuất hiện của i trong mảng A.
    ví dụ: Dem[A[i]] = 5 =>A[i] xuất hiện trong mảng A 5 lần
    * Xong duyệt mảng dem[] tìm Max của mảng dem[] =>Đó chính là số lần xuất hiện nhiều nhất của các số đó tươngt ự như demMax ở trên.
    * Duyệt mảng dem[] một lần nữa và phần tử nào của mảng dem[] = demMax thì ta in ra chỉ số của phần tử đó tức là A[i] (phần tử thuộc mảng ban đầu).

    Chi phí :3 lần duyệt mảng (ko cần sắp xếp trước);

    Hạn chế:
    + Ở cách thứ hai chỉ áp dụng cho những mảng có miền xác định nhỏ (khoảng <100) nghĩa là các phần tử trong mảng < 100.Mục đích là để ko làm phí chỗ trống khi ta khai báo và sử dụng mảng dem[]

    + Còn phần tử >100 thì dùng cách thứ 1: 2 lần duyệt + 1 lần sắp xếp chắc ko phải là 1 giải thuật quá tồi!

    - Mình thử code cho bạn cách thứ 1 nhé:
    C Code:
    1. //Sort this Array in Order before Use this way
    2. int timSoLanXuatHienNhieuNhat(int A[], int n)
    3. {
    4.     int dem = 1;
    5.     int demMax = 1;
    6.     for(int i=1;i<n;i++)
    7.     {
    8.         if (A[i+1]==A[i])
    9.         {
    10.             dem = dem + 1;
    11.         }
    12.         else
    13.         {
    14.             dem = 1;
    15.         }
    16.         if (dem>demMax)
    17.         {
    18.             demMax = dem; //cap nhat ki luc
    19.         }
    20.     }
    21.     return(demMax); //tra ve so lan nhieu nhat
    22. }

    C Code:
    1. void inRaCacPhanTuXuatHienNhieuNhat(int A[], int n, int demMax)
    2. {
    3.     int dem = 1;
    4.     for(int i=1;i<n;i++)
    5.     {
    6.         if (A[i+1]==A[i])
    7.         {
    8.             dem = dem + 1;
    9.         }
    10.         else
    11.         {
    12.             dem = 1;
    13.         }
    14.         if (dem==demMax)
    15.         {
    16.             printf("%d ",A[i]); //neu bang so lan nhieu nhat thi xuat ra
    17.         }
    18.     }
    19. }
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 27-03-2008 lúc 04:34 PM.
    No way, No success..

Các đề tài tương tự

  1. Kỹ thuật C Xác định phần tử lặp lại nhiều nhất trong mảng
    Gửi bởi nguyennhutbinh_269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 01-10-2011, 08:01 AM
  2. Bài tập C In ra màn hình phần tử xuất hiện nhiều nhất trong mảng?
    Gửi bởi viethai1431 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 07-08-2011, 01:03 PM
  3. Tìm phần tử xuất hiện nhiều nhất trong mảng
    Gửi bởi thanhtung_tn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 25-05-2011, 08:48 AM
  4. Bài toán in số lượng phần tử dãy con tăng nhiều nhất trong dãy A
    Gửi bởi buihuuloc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 28-04-2011, 01:05 PM
  5. Lập trình C++ Tìm lỗi trong hàm đếm số phần tử lặp lại nhiều lần nhất và hàm tìm số nguyên tố
    Gửi bởi nguyenthidiemtuyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 23-01-2011, 02:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn