Xuất ra số lần xuất hiện của các phần tử trong mảng?

Em có bài tập mảng 1 chiều.

Nhập vào 1 mảng gồm n phần tử. Xuất ra số lần xuất hiện của các phần tử trong mảng. Và tìm phần tử nào xuất hiện nhiều nhất, và ít nhất

Cho em ý tưởng cái

#include <iostream>
using namespace std;

std::pair<int,int> find_max_frequency(int* a,int n)	{
	
	int temp[n];
	for(int i = 0; i < n; i++)
		temp[i] = 1;
	int max = 1,max_index = 0;
	
	for(int i = 1; i < n; i++)	{
		
		for(int j = 0; j < i; j++)	{
			
			if(a[i] == a[j])	{
				
				temp[i] = temp[j]+1;
				if(max < temp[i])	{
					
					max_index = i;
					max = temp[i];
				}
			}
		}
	}
	
	return {a[max_index],max};
}

int main() {
	
	int a[] = { 1,2,2,3,3,3,4,4,4,4,5,5,5,5,5 };
	int n = sizeof(a)/sizeof(a[0]);
	
	std::pair<int,int> m = find_max_frequency(a,n);
	cout << "Element and frequency: ";
	cout << m.first << " " << m.second << endl;
	return 0;
}

Cũng chưa test, chắc là có sai, tí nữa về test lại sau.

3 Likes

Có nhiều cách. Bày cho 1 ý tưởng cơ bản:

  • sắp xếp mảng tăng hoặc giảm dần.
  • xét a[i] và a[i+1] (2 phần tử liền kề). Nếu = nhau thì tăng đếm lên 1 (dem++);
  • nếu a[i] và a[i+1] khác nhau thì trả về biến đếm trước.
    đó là đếm =)))
    Tìm max+min thì duyệt mảng, tìm max_dem và min_dem không khó đâu =)) :trollface: :running:
4 Likes

trong diễn đàn có bài này rồi mà

1 Like

@Htc cho luôn cái link đi để @Kelvin_Nguy_n vào xem. Sau này hi vọng sẽ có cơ chế thông báo có bài trùng do thành viên phát hiện. Khi phát hiện ra bài trùng thì mình thông báo thông qua chức năng đó.

2 Likes
int demphantu(int a[],int n)
{
	int dem=1;
	for(int i=0;i<n;i++)
   {
   if(a[i]=a[i+1])
      {
          dem++; 
      }
        else
       {
     return dem;
       }
      printf("\nPhan tu a[%d] xuat hien %d lan",i,dem);
	}


}

Sai chổ nào mọi người

2 Likes

cái dòng này loàng ngoàng vậy ?

1 Like
  • Bạn chưa sắp xếp mảng.
  • Vòng lặp có thể kết thúc khi chưa hết vòng lặp.
2 Likes

nhìn vào if đã thấy sai :trollface:

1 Like

cái if nó luôn là true :mouse:

1 Like

Lần đầu mong mọi người góp ý ạ :smiley:

#include <stdio.h>
void swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
void nhapham(int a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("the value of A[%d]= ", i + 1);
		scanf("%d", &a[i]);
	}
}
int main(void)
{
	int n;
	int a[20];
	printf("so luong:\n");
	scanf("%d", &n);
	nhapham(a, n);
	for (int i = 0; i <n; i++)
	{
		for (int j = i + 1; j < n; j++)
			if (a[i]<a[j])
			
			swap(&a[i], &a[j]);
	}
	int chuan = a[0];
	int count = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i]==chuan)
		{
			count++;
		}
		if (chuan!=a[i])
		{
			printf("the %d appear %d times\n", a[i - 1], count);
			chuan = a[i];
			count = 1;
		}
		if (i==n-1)
		{
			printf("the %d appear %d times\n", a[i], count);

		}
	}
	return 0;
}
1 Like

sao bạn không đặt thêm 1 mảng nx?
cho là:

cin>>z[i];
lap[z[i]]++;

lap là mảng thứ 2 đó

1 Like

2 posts were merged into an existing topic: Topic lưu trữ các post off-topic - version 3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?