30/09/2018, 16:16

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

viết 18:27 ngày 30/09/2018
#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.

X viết 18:17 ngày 30/09/2018

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:
Hồ Thế Chín viết 18:32 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

@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 đó.

Kelvin Nguyễn viết 18:25 ngày 30/09/2018
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

Thực tế khắc nghiệt viết 18:23 ngày 30/09/2018

if(a[i]=a[i+1])
{
dem++;
}
else
{
return dem;
}
printf("\nPhan tu a[%d] xuat hien %d lan",i,dem);
}

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

viết 18:24 ngày 30/09/2018
int demphantu(int a[],int n)
{
	int dem=1;
	for(int i=0;i&lt;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

  • 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.
X viết 18:27 ngày 30/09/2018

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

Sáng Béo viết 18:25 ngày 30/09/2018

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

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

Bài liên quan
0