30/09/2018, 16:18

Tìm giá trị xuất hiện nhiều nhất trong mảng và số lần xuất hiện?

Tìm giá trị xuất hiện nhiều nhất trong mãng và số lần xuất hiện

#include<stdio.h>
#include<conio.h>
#include<math.h>
void nhapmang(int a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf(" Phan tu a[%d]: ",i);
	    scanf("%d",&a[i]);
	}
}
void xuatmang(int a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("%3d",a[i]);
	}
}
int Timsolanxuathien(int a[],int n)
{
	sapxeptangdan(a,n);
	int max=0;
	int dem=1;
	for(int i=0;i<n;i++)
	{
		if(a[i]==a[i+1])
		{
			dem++;
				if(dem>max)
				{
					max=dem;
				}	
			
		}
		else
		{
			
           dem=1;
		}
	}
	return max;

}
int main()
{ 
     int a[50],n;
     do
  {
      printf("
 Nhap so luong phan tu: ");
      scanf("%d",&n);
  if(n<=0)
	  printf(" Nhap n duong!");
  }
  while(n<=0);
  nhapmang(a,n);
  xuatmang(a,n);
  printf("
Mang sau khi xoa thoa yeu cau: ");
  int Nhieunhat= Timsolanxuathien(a,n);
  printf("
So lan nhat hien nhieu nhat la: %d",Nhieunhat);
  getch();
  return 0;
}

Em chỉ in ra đc số lần xuất hiện nhiều nhất thôi, Làm sao để xuất ra luôn phần tử xuất hiện nhiều nhất. Ai bổ sung giúp em với

Hoàng Long viết 18:25 ngày 30/09/2018

Bài này làm vầy được không ^^
Đầu tiên viết một hàm đếm số lần xuất hiện của 1 phần tử bất kỳ trong mang. Sau đó so sánh số lần xuất hiện của lần lược các phần tử…

int CountX(int a[], int n, int x)
{
    //Cái này chắc tự viết được ^^
}


void SoLanXuatHien(int a[], int n)
{
     int max = a[0], vtMax = 0;
     for(int i= 0; i < n; i++)
    {
         if(max < CountX(a, n, a[i]))
            {
              max = CountX(a, n, a[i]);     
              vtMax = i;
            }
    }
   //xuat phan tu tai vi tri i + So lan 
}
viết 18:30 ngày 30/09/2018

Bài này hình như bạn hỏi ở đây rồi mà: Tìm giá trị xuất hiện nhiều nhất và số lần xuất hiện trong MẢNG 1 chiều?

BaoLe viết 18:31 ngày 30/09/2018
#include<stdio.h>
#include<conio.h>
int main(){
	//khai bao mangdem de chua so lan xuat hien cua moi phan tu co trong mangA.
	int mangA[50]={},soPhantu,mangdem[50]={};
	printf("Nhap so phan tu cua mang:");
	scanf("%d",&soPhantu);
	//Nhap mang.
	for(int i=0;i<soPhantu;i++){
		if(i==0)
			printf("Nhap gia tri cho cac phan tu trong mang:\n");
		printf("A[%d]=",i);
		scanf("%d",&mangA[i]);
	}
	for(int i=0;i<soPhantu;i++){
		int dem =1;//khoi tao bien dem bang 1 vi moi phan tu it nhat phai xuat hien 1 lan.
		mangdem[i]=dem;// so lan xuat hien cua phan tu MangA[i] se ung voi gia tri cua phantu mangdem[i]
		for(int j=i+1;j<soPhantu;j++){
			if(mangA[i]==mangA[j]){//kiem tra su xuat hien cua phan tu Mang[i] bang cach so sanh voi phan tu MangA[j],neu 2 phan tu nay bang nhau thi xuat hien them mot phan tu MangA[i] nua va phai tang dem len 1.
				mangdem[i]=++dem;
				for(int k=j;k<soPhantu;k++){//sau khi kiem tra neu phantu MangA[j]=MangA[j] thi sau khi tang bien dem len 1 va xoa phan tu MangA[j] de tranh lap lai viec dem phan tu do.
					mangA[k]=mangA[k+1];
				}
				soPhantu--;//giam so phan tu di 1 vi ta cua xoa di mot phan tu co gia tri bang phan tu Mang A[i]
				j--;//giam j de viec de tranh bo xot di 1 phan tu trong cac lan kiem tra sau.
			}
		}
	}
	int max=0,vi_tri=0;//bien max chua so lan xuat hien nhieu nhat,vi_tri de chua vi tri cua phan tu xuat hien nhieu nhat trong mangA
	for(int i=0;i<soPhantu;i++){
		if(mangdem[i]>max){//so sanh max voi cac phan tu trong mangdem neu phan tu mangdem[i] lon hon max thi gan cho max,dong thoi gan chi so i cho vi_tri
			max=mangdem[i];
			vi_tri=i;
		}
}
		printf("\nPhan tu thu %d trong mangA xuat hien nhieu nhat ,cu the la %d lan.\n",vi_tri+1,max);
	getch();
	return 0;
}
Nguyễn Minh Dũng viết 18:32 ngày 30/09/2018

Bài này hình như bạn hỏi ở đây rồi mà: Tìm giá trị xuất hiện nhiều nhất và số lần xuất hiện trong MẢNG 1 chiều?

Chính xác rồi đấy

@Kelvin_Nguy_n để ý cách đặt tiêu đề nhé. Đừng đặt tiêu đề quá chung chung. Đạt đã sửa tiêu đề lại cho phù hợp.

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

Hehe =)) Nhờ vào your post mà mình đã xong bài này.
bonus: Xuất ra luôn phần tử xuất hiện nhiều nhất, ta làm như sau: ở hàm Timsolanxuathien, ta thêm 1 thằng int xuathiennn, viết code lại thành:
for(int i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
dem++;
if(dem>max)
{
max=dem; xuathiennn=a[i];
}

	}
	else
	{
		
       dem=1;
	}
}

Rồi trong hàm main, cùng vs dòng printf Số lần xuất hiện nn, ta in thêm xuathiennn( chính là phần tử xuất hiện nn).

Duong Duong viết 18:19 ngày 30/09/2018

oops! hình như ở trên đã có người viết rồi
Klq nhưng có một bài có một phần dùng cái code ở trên để giải trong Topcoder, tên là Aseries lấy 300 điểm mức Medium,mn có thể tham khảo để phát triển bài toán hơn.
Chúc mn 1 ngày tốt lành

rogp10 viết 18:22 ngày 30/09/2018

tìm csc dài nhất https://github.com/spa46/topcoder/wiki/03.-ASeries ?

Bài liên quan
0