Hướng dẫn chạy đoạn code in ra các phần tử xuất hiện nhiều nhất

tôi có 1 đoạn code về in ra các phần tử xuất hiện nhiều nhất nhưng không biết cách chạy như thế nào
bạn nào có thể chạy bằng tay cho mình được không ạ, mình cám ơn nhiều
Nhất là cái mảng b[a[i]] là như thế nào mình hình dung không được!!

void pttrung(int a[],int b[],int n){
		int max=0;
	for(int i=0;i<n;i++)
		b[a[i]]++;
	for(int i=0;i<n;i++)
		if(b[a[i]]>max) max=b[a[i]];
	for(int i=0;i<n;i++)
		if(b[i]==max)
			cout<<i;
}
1 Like

Bạn có đoạn code nhưng không biết nó chạy thế nào? => Copy của người khác hoặc tìm trên mạng
Vậy bạn đã học mảng chưa, các kỹ thuật mảng như Nhập, xuất, tách, gộp, sắp xếp, cập nhật, …?

1 Like

cái đó mình biết rồi mình chỉ thắc mắc là b[a[i]]++ nó sẽ chạy như thế nào thôi

vậy nếu như thằng mảng a có phần tử là 2 thì mảng b sẽ tăng 2 lên 1 đơn vị là 3 hả bạn

1 Like

Hehe, mình cũng không rõ lắm vì cái này mình có gặp lâu rồi và cũng quên :slight_smile:
@TheSky @conan4582 vào giúp kìa :joy:

có ai không trợ giúp tí đi nào

b[a[i]]++
Tăng các phần tử mảng b[] có index là giá trị các phần tử trong mảng a[] lên 1.
Vd: a[3]={2,5,8}
b[2]++
b[5]++
b[8]++

1 Like

còn b[a[i]] có phải lả lấy giá trị của a[i] vào b phải không bạn

Lấy a[i] làm chỉ mục cho b[]
j=a[i]
b[a[i]] = b[j]

1 Like

for(int i=0;i<n;i++)
if(b[i]==max)
cout<<i;
rồi còn cái này bạn b[i] cái i này là i của thằng a hay thằng b z bạn và xuất cái i ra là cái i của ai vạy bạn

i của b
For 1 : tăng các b[j] lên 1, j ở đây là các a[i]
For 2 : tìm max trong đám b[j] ở trên
For 3: tìm trong toàn bộ mảng b xem có thằng nào = max ko. Thằng nào bằng max thì in vị trí của nó trong mảng

1 Like

nếu mình cho ví dụ cụ thể thế này vi dụ n=4
2
3
2
1
thì sẽ in ra là j hả bạn
số 3 hay là số 2 đây

Bạn lấy giấy vạch ra 2 mảng rồi thực hiện lần lượt trên giấy là ra.

thằng for 2 mình chưa hiểu bạn giải thích giùm mình đi tks bạn nhiều

For 2 + mảng b là nơi để lưu số lần xuất hiện của phần tử đó trong mảng trước.
Với giá trị của phần tử ở mảng a tương đương với chỉ số ở mảng b.
sau khi đó chỉ cần kiểm tra mảng b tìm xem phần tử nào có giá trị lớn nhất rồi in giá trị đó +
chỉ số là ra phần số lần xuất hiện + giá trị của mảng a

1 Like

ví dụ chạy bằng tay mình xem được không khó hình dung quá

:slight_smile: Việc khó của bạn mà mình làm thì nó vẫn là của mình thôi mà.
Hãy tự đặt bút mà làm đi chứ nhỉ :slight_smile:

ờ mình đang làm nhưng không hiểu cái mảng b nó như thế nào

Ví dụ n = 4
mảng a = {1,2,3,1}
mảng b gồm giá trị từ 1 -> n. Đặt hết = 0. Tức là b[1] = 0, b[2] = 0 …v.v
Vòng for thứ nhất: Đếm số lần xuất hiện của từng giá trị trong mảng a:
i = 0 -> a[i] = 1 -> b[ a[0] ] = b[1] = 0+1 = 1;
i = 1 -> a[i] = 2 -> b[ a[1] ] = b[2] = 0+1 = 1;
i = 2 -> a[i] = 3 -> b[ a[2] ] = b[3] = 0+1 = 1;
i = 3 -> a[i] = 1 -> b[ a[3] ] = b[1] = 1+1 = 2;
Vòng for thứ hai: Tìm xem giá trị nào xuất hiện nhiều nhất.
max = 0;
i = 0 -> a[i] = 1 -> b[ a[0] ] = b[1] = 2. Mà 2 > max => max = 2;
i = 1 -> a[i] = 2 -> b[ a[1] ] = b[2] = 1 Mà 1 < max => bỏ qua
i = 2 -> a[i] = 3 -> b[ a[2] ] = b[3] = 1 Mà 1 < max => bỏ qua
i = 3 -> a[i] = 1 -> b[ a[3] ] = b[1] = 2 Mà 2 == max => bỏ qua
Vòng for thứ ba: In ra số mà xuất hiện nhiều nhất
i = 0 -> b[0] = 0 -> 0 < max => bỏ qua
i = 1 -> b[1] = 2 -> 2 == max => in ra số 1
i = 2 -> b[2] = 1 -> 1 < max => bỏ qua
i = 3 -> b[3] = 1 -> 1 < max => bỏ qua

Lời khuyên cho bạn là ra cửa hàng mua quyển vở và cái bút về nháp nhé.

7 Likes

hiểu rồi cám ơn bạn nhiều nha mình đã hiểu cách đếm rồi tks bạn nhiều

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?