30/09/2018, 20:52
hướng dẫn code này chạy như thế nào ạ
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;
}
Bài liên quan
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, …?
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
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
@TheSky @conan4582 vào giúp kìa
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]++
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]
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
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
ví dụ chạy bằng tay mình xem được không khó hình dung quá
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ỉ
ờ 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é.
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