01/10/2018, 10:17
Anh chị giúp em bài con trỏ trong C này với!
Đề: Nhập vào mảng các số nguyên. Cho biết các phần tử nào xuất hiện nhiều nhất mảng và xuất hiện ít nhất mảng. Sử dụng con trỏ.
Code em tìm được giá trị xuất hịên nhiều nhất. Giá trị xuất hiện ít nhất vẫn chưa tìm được. Anh chị giúp em với.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void NhapMang (int n, int a[])
{
int *pa;
for (pa = a; pa < a + n; pa++)
{
printf ("A[%d] = ", pa - a);
scanf ("%d", pa);
}
}
void XuLi (int n, int a[])
{
int *pi, *pj;
int *dem = (int *)calloc (n, sizeof(int));
for (pi = a; pi < a + n; pi++)
{
int demt = 1;
for (pj = pi + 1; pj < a + n; pj++)
{
if (*pi == *pj)
demt++;
dem[pi - a] = demt;
}
}
int max = 0, min = 0, vt_max = 0, vt_min = 0;
for (pi = dem; pi < dem + n; pi++)
{
if (*pi > max)
{
max = *pi;
vt_max = pi - dem;
}
else if (*pi < min)
{
min = *pi;
vt_min = pi - dem;
}
}
//--------------------------
printf ("Phan tu %d xuat hien nhieu nhat trong mang %d lan", *(a + vt_max), max);
printf ("
Phan tu %d xuat hien it nhat trong mang %d lan", *(a + vt_min), min);
}
int main()
{
int n;
printf ("Nhap n: ");
scanf ("%d", &n);
int a[n];
NhapMang (n, a);
XuLi (n, a);
getch ();
return 0;
}
Bài liên quan
Mình đọc code của bạn không hiểu lắm bạn có thể giải thích về ý tường được không?
À bạn cũng không cần phải tạo pointer cho mảng a đâu vì khi bạn truyển mảng vào cũng giống như bạn truyền pointer của nó vào rồi.
min
nên gán một số lớn, nếu bạn gánmin = 0
thì không tìm được giá trị nhỏ nhất bởi vìdem[ i ] >= 1 > min
Ý tưởng của mình là:
xử lí
mình dùng để đếm số lần xuất hiện của mỗi phần tử trong mảng và lưu vào mảngdem
.dem
. Lấy kết quả sau đó in ra màn hình.Bạn nói rõ chỗ pointer cho mảng a không. Mình không hiểu lắm.
Mình hiểu ý bạn rồi. Cảm ơn bạn!
Má gán trước min max như bạn không đúng đâu phải là INT_MAX và INT_MIN tương ứng. Trừ một số trường hợp (do chưa nhập nên gán ko được) thì cứ gán bằng phần tử đầu chắc ăn.
Sao bạn không sắp xếp dãy đó lại rồi so sánh chuỗi số bằng nhau nó sẽ đơn giản hơn
Còn về phần mảng thì
nếu bạn sử dụng
nó sẽ giống như
nhưng khác là bạn có thể dùng
thay cho
Trong ds tham số thì int[] cũng như int*.
Ohh. Ý tưởng của bạn mình có dùng rồi nhưng cũng chỉ phần tử xuất hiện nhiều nhất. Còn trường hợp ít nhất mình tìm không được
Ohh. Bạn ví dụ cho mình được không ^.^ chỗ
INT_MAX
vàINT_MIN
á.hãy chọn cách code mà ai đọc cũng hiểu , chứ t nhìn vào code của bạn t chả hiểu gì luôn ý
ở đây mình sắp xếp rồi tìm vẫn ra mà
Ý tưởng thì như mình đã nói rồi đó bạn…Chỉ khác so với bình thường là mình sử dụng con trỏ thôi
Bài này bạn truyền mảng thì cũng giống như truyền pointer mà
Okie…cảm ơn bạn nhiều…mình sẽ debug bài của bạn :))