Trang 1 trên tổng số 5 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 47 kết quả

Đề tài: Viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng 1 chiều các số nguyên?

  1. #1
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Angry Viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng 1 chiều các số nguyên?

    Có bạn nào biết làm bài này rồi gợi ý cho mình với?
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Mình chưa code, vì đang ở trường, chỉ dùng được mạng có một lúc thui!!
    Nhưng có ý tưởng thế này: Phải sắp xếp trước rồi mới đếm
    I don't wanna waste another day

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

    Không cần sắp xếp vẫn tìm được, bạn viết 1 hàm tìm số lần xuất hiện của 1 số k trong mảng. sau đó viết 1 hàm tìm phần tử xuất hiện nhiều nhất, trong hàm này bạn sẽ đặt 1 biến lính canh giữ giá trị của phần tử xuất hiện nhiều nhất. biến này đầu tiên giữ giá trị đầu tiên trong mảng. sau đó bạn lần lượt duyệt qua các giá trị còn lại trong mảng, nếu giá trị đang xét trùng với giá trị lính canh hoặc có số lần xuất hiện trong mảng bé hơn hoặc bằng biến lính canh thi ta bỏ qua, còn nếu giá trị này có số lần xuất hiện nhiều hơn số lần xuất hiện của biến lính canh thì ta gán lại biến lính canh bằng giá trị mới này. ( ta sẽ dùng hàm tìm số lần xuất hiện của giá trị k trong mảng để thực hiện việc này),

    Bạn cũng có thể đặt thêm 1 biến tần suất để lưu số lần xuất hiện của biến linh canh đang xét tại thời điểm hiện tại để tiện cho việc so sánh

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

    /* viet ham tim phan tu xuat hien nhieu nhat trong mang 1 chieu */

    # include <stdio.h>
    # include <conio.h>

    void nhap_mang (int A[100],int n)
    {
    for (int i=0;i<n;i++)
    { printf ("\n Nhap A[%d] ",i);
    scanf ("%d",&A[i]);
    }
    }
    int appear (int A[],int n,int x)
    { int count=0;
    for (int i=0;i<n;i++)
    if (A[i]==x)
    count ++;
    return count ;
    }
    int max_appear(int A[],int n)
    { int max=appear(A,n,0),j=A[0];
    for (int i=0;i<n;i++)
    if ( max < appear(A,n,i))

    {
    max=appear(A,n,i);
    j=A[i];
    }
    return j;
    }


    void main()
    {
    int A[100],n;
    printf ("\n Nhap n:");
    scanf("%d",&n);
    nhap_mang(A,n);
    int t=max_appear(A,n);
    printf ("\n so xuat hien nhieu nhat la %d ",t);


    }
    Đây là program của mình nó chạy tốt rồi , nhưng lỡ may em nhập 2 số có cùng số lần xuất hiện thì làm thế nào mà ra được 2 số
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

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

    Muốn xuất ra tất cả các phần tử xuất hiện nhiều nhất trong mảng thì cách đơn giản nhất là : hàm tìm max thay vì trả về giá trị xuất hiện nhiều nhất thì ta trả về tần số xuất hiện của phần tử xuất hiện nhiều nhất.
    Sau đó ta sẽ viết thêm 1 hàm liệt kê, trong hàm này ta đặt 1 biến lính canh . Gán giá trị biến lính canh này là số lần xuất hiện nhiều nhất của một phần tử (giá trị trả về của hàm tìm max ) trong mảng. Sau đó ta lần lượt xét các giá trị trong mảng, nếu giá trị nào có số lần xuất hiện trùng với biến lính canh ta sẽ xuất giá trị đó ra màn hình.
    Lưu ý: Để tránh tình trạng xuất một giá trị nhiều lần ( do xuất hiện nhiều lần trong mảng ), ta có thể dùng một mảng phụ lưu các giá trị đã xuất ( xuất hiện nhiều nhất ) vô đó, rồi mỗi lần tìm thấy một phần tử xuất hiện nhiều nhất ta sẽ kiểm tra xem phần tử đó có nằm trong mảng phụ này hay không, nếu không thì xuất nó ra. Ngược lại tức là giá trị này ta đã xét qua trước đó rồi nên bỏ qua không xuất nữa và đi xét phần tử kế tiếp.

    Đó chỉ là một cách gợi ý, thực tế có nhiều cách khác nhau để giải quyết bài toán này

  6. #6
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Mặc định Viết hàm tìm phần tử xuất hiện nhiều nhất trong mảng 1 chiều các số nguyên?

    đoạn code của bạn mình thấy vẫn chưa ổn. vd nhé: n = 5; a[0]=1; a[1] = 2; a[2]=a[3]=a[4]=8; thì sao nào?
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  7. #7
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Mình nghĩ là đề bài phải có giới hạn về độ lớn của các phần tử trong mảng mới làm được bài này
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  8. #8
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Code:
    int max_appear(int A[],int n)
    {    int max=appear(A,n,A[0]),j=A[0];
         for (int i=1;i<n;i++)
        if ( max < appear(A,n,A[i]))
    
        {
             max=appear(A,n,A[i]);
             j=A[i];
        }
         return j;
    }
    Mình nghĩ là sửa lại thế này sẽ hợp lý hơn
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

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

    Có lẽ bạn ấy gõ lộn vị trí của mảng vô đó. Những sai sót này hết sức nguy hiểm

  10. #10
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    Code:
    void Xoa(int b[], int &n, int vitri)
    {
    	for(int i = vitri; i < n-1; i++)
    		b[i] = b[i+1];
    	n--;
    }
    
    int appear(int A[], int n, int x)
    {
    	int count = 0;
    	for(int i=0; i<n; i++)
    		if(A[i] == x)
    			count++;
    	return count;
    }
    
    void max_appear(int A[], int n)
    {
    	int max = appear(A, n, A[0]), j = 0, k;
    	int flag[100];
        flag[0] = A[0];
    	for(int i = 1; i < n; i++)
    		if (max <= appear(A, n, A[i]))
    		{
    			max = appear(A, n, A[i]);
    			flag[++j] = A[i];
    
    		}
    	for(i = 0; i < j-1; i++)
    		for(k = i+1; k < j; k++)
    			if(flag[i] == flag[k])
    			{
    				Xoa(flag, j, k);
    				k--;
    			}
    	for(i=0; i < j; i++)
    		printf("%3d",flag[i]);
    
    }
    thanhluan07 ơi, mình code lại thế này có đúng ý bạn ko?
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

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

  1. Bài tập C Nhập x, viết hàm chỉ ra vị trí xuất hiện x trong mảng 1 chiều
    Gửi bởi HoangCoi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 21-08-2011, 02:15 PM
  2. Lập trình C Tìm phần tử xuất hiện ít nhất trong mảng 1 chiều
    Gửi bởi masterkids trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 21-02-2011, 11:18 PM
  3. 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
  4. nhập vào mãng 1 chiều các số nguyên và xuất ra các phần tử chẵn nhỏ hơn 20
    Gửi bởi datdao2000 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-11-2010, 08:48 AM
  5. Tìm phần tử có số lần xuất hiện nhiều nhất trong mảng 1 chiều
    Gửi bởi Vaanres trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 06-08-2010, 10:12 AM

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