01/10/2018, 10:02

Lỗi chương trình tìm kiếm phần tử xuất hiện nhiều nhất/ít nhất trong mảng 1 chiều

Hi mọi người , như tiêu đề, mình đang mắc lỗi ở bài tập tìm kiếm phần tử xuất hiện nhiều nhất/ít nhất trong mảng một chiều .
đây là code của của mình

#include <stdio.h>
#include <stdlib.h>
void nhap(int a[],int n)
{
   for(int i=0;i<n;i++)
   {
       printf("Nhap a[%d]: ",i+1);
       scanf("%d",&a[i]);
   }
}
void search(int a[],int b[], int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(a[j]==a[i])
                b[i]++;
        }
    }
}
void xuat(int a[],int b[],int n)
{
    int i;
    int max=1,min=1;
    for(int i = 0;i<n;i++)
    {
        if(b[i]>max)
           {
            max=b[i];
           }
           if(b[i]==max)
           {
            printf("
phan tu %d xuat hien nhieu nhat, xuat hien %d lan",a[i],b[i]);
            printf("

");
           }
    }
    for(int i = 0;i<n;i++)
    {
        if(b[i]<min)
           {
            min=b[i];
           }
        if(b[i]==min)
        {
         printf("
phan tu %d xuat hien nhieu nhat, xuat hien %d lan",a[i],b[i]);
         printf("

");
        }
    }



}
int main()
{
    int a[100],b[100]={0};
    int n;
    printf("Nhap N = 
");
    scanf("%d",&n);
    nhap(a,n);
    search(a,b,n);
    xuat(a,b,n);
    return 0;
}

code thì vẫn chạy bình thường nhưng nó mắc một lỗi như thế này.
khi mà mình in kết quả ra màn hình thì nó lại in giá trị lớn nhất ra thêm một lần nữa.
ví dụ khi mình nhập vào a = {1,1,1,3,3,3,4,7
đây là kết quả khi chạy chương trình


không biết có cách nào khắc phục lỗi này không ạ mong mọi người giúp đỡ, xin cảm ơn

HK boy viết 12:08 ngày 01/10/2018

for(int i = 0;i<n;i++)
{
if(b[i]>max)
{
max=b[i];
}
if(b[i]==max)
{
printf("\nphan tu %d xuat hien nhieu nhat, xuat hien %d lan",a[i],b[i]);
printf("\n\n");
}
}

Vấn đề ở đây. max phải là duy nhất. Khi xác định được max rồi mới tìm phần tử xuất hiện nhiều nhất chứ. Bạn tách tìm max và tìm phần tử == max ra.
Góp ý: Không nên đặt tên biến là max, min.

Hoài Nam Trương viết 12:13 ngày 01/10/2018

em có thử đặt hàm tìm max với == max ra ngoài nhưng nó vẫn in lại phần tử đã xét thêm một lần nữa, làm cách nào để nó không in lại một lần nữa và chỉ xuất ra kết quả của phần tử xuất hiện nhiều và ít nhất hả anh ?

Henry viết 12:08 ngày 01/10/2018

thì bạn làm cái mảng đó thành một cái mảng khác mà các phần tử không trùng rồi đém hoặc lưu giá trị cho biến khác

HK boy viết 12:05 ngày 01/10/2018

Dòng 43, tại sao b[i] < max1 thì max1 = b[i]? Có gì đó cực sai ở đây. Hình như đây chính là mấu chốt của bài tại sao bạn in ra từa lưa mà vẫn sai :v

Hoài Nam Trương viết 12:07 ngày 01/10/2018

mình có thử khai báo lại với b[i] < min1 nhưng kết quả nó vẫn vậy

HK boy viết 12:08 ngày 01/10/2018

min1 phải để rất to chứ không phải là bé tí…

Hoài Nam Trương viết 12:13 ngày 01/10/2018

không hiểu lắm, nghĩa là sao ạ?

HK boy viết 12:18 ngày 01/10/2018

min1 phải gán là 1 số rất to…
Thì rõ ràng là muốn tìm min của tất cả thì phải khởi tạo min1 là 1 số cực lớn để tất cả các số trong dãy đều nhỏ hơn min1…

Bài liên quan
0