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
Bài liên quan
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.
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 ?
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
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 :vmình có thử khai báo lại với
b[i] < min1
nhưng kết quả nó vẫn vậymin1 phải để rất to chứ không phải là bé tí…
không hiểu lắm, nghĩa là sao ạ?
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…