01/10/2018, 08:32

Giúp đỡ bài thống kê tần suất xuất hiện phần tử trong mảng 1 chiều

Đề bài: Thống kê tần suất xuất hiện của các phần tử trong mảng 1 chiều? sao cho các giá trị xuất hiện 1 lần.hỏi : sao giá trị 3 xuất hiện 2 lần, giá trị 2 lập lại

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

void nhap(int *(*a),int *n)
{
    int i;
    printf("nhap n:");
    scanf("%d",n);
    *a = (int *) malloc((*n) * sizeof(int));
    for(i=0;i<*n;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",(*a+i));
    }
}
int demx(int x,int *a,int n)
{
    int i;
    printf("nhap vao x:");
    scanf("%d",&x);
    for(i=0;i<n;i++)
    {
        if(*(a+i)==x)
        printf("phan tu trung la %d
",*(a+i));
    }
    return *(a+i);
}
void inthongke(int *a,int n)
{
    int i,j;
    int dem=1;
    for(i=0;i<n;i++)
    {
      for(j=i+1;j<=n;j++)
    {
      if(*(a+i)==*(a+j))
      dem=dem++;
    }
    printf("%d xuat hien %d lan
",*(a+i),dem);
    }
}
int main()
{
    int *a;
    int n;
    int i;
    int x;
    nhap(&a,&n);
    demx(x,a,n);
    inthongke(a,n);
    return 0;
}

Nguyen Ca viết 10:45 ngày 01/10/2018

Săp xêp mảng tăng dần hoặc giảm dần

665333221

tăng biến đếm trong khi a[i]==a[i+1]. ngươc lại reset biến đếm và đếm cho số tiếp theo.

huyentrang viết 10:48 ngày 01/10/2018

cho biến đếm vào trong vòng lặp for thứ nhất.
mà đoạn đó nên sửa lại như sau:
for (i = 0;i < n;i++)
{
dem = 0;
for (j = 0;j < n;j++)
{
if (a[i] == a[j])
{
dem++;
}
}
printf("%d xuat hien %d lan\n ", a[i], dem);

huyentrang viết 10:40 ngày 01/10/2018

http://pastebin.com/2imLtkgz
đây là bài mình code bằng array, gần giống bài đó

rogp10 viết 10:34 ngày 01/10/2018

Thớt cũng code tựa tựa vậy.

Erratic Tôn viết 10:36 ngày 01/10/2018
void inthongke(int *A, int n) {
	int demtruoc, demsau;
	for(int i =0; i<n; i++) {
		demtruoc = demsau = 0;
		for(int j=0; j<i; j++) {
			if(A[i] == A[j])
				demtruoc++;
		}
		for(int k=i+1; k<n; k++) {
			if(A[i] == A[k])
				demsau++;
		}
		
		if(demsau == 0)
			printf("\n%d xuat hen %d lan", A[i], demtruoc + demsau + 1);
	}
}

mình sửa lại như sau các bạn cho xin ý kiến

Trần Linh viết 10:33 ngày 01/10/2018

Bạn có thể dùng map với key là số và value là tần suất xuất hiện của số đó trong mảng.

rogp10 viết 10:40 ngày 01/10/2018

C không có map bạn

Nguyen Ca viết 10:35 ngày 01/10/2018

Một cách làm khác

typedef struct mang
{
	int n;
	int a[100];
};
void Tan_So(mang l)
{
	int tansuat[50];
	int i,j;
	for(i=0;i<l.n;i++)
		tansuat[i]=1;
	for(i=0;i<l.n-1;i++)
		for(j=i+1;j<l.n;j++)
			if(l.a[i]==l.a[j]&&tansuat[i]!=0)
			{
				tansuat[i]++;
				tansuat[j]=0;
			}
	for(i=0;i<l.n;i++)
		if(tansuat[i]!=0)
			printf(" %3d : %3d lan\n",l.a[i],tansuat[i]);
}
rogp10 viết 10:32 ngày 01/10/2018

Mảng nó 100 thật thì sao

Săp xêp mảng tăng dần hoặc giảm dần

</thread>

Bài liên quan
0