Tôi đang cố gắng đưa ra một thuật toán dưới dạng một hàm chấp nhận hai tham số, một mảng và kích thước của mảng. Tôi muốn nó trả về chế độ của mảng và nếu có nhiều chế độ, hãy trả về giá trị trung bình của chúng. Chiến lược của tôi là lấy mảng và đầu tiên sắp xếp nó. Sau đó đếm tất cả các lần xuất hiện của một số. trong khi con số đó xảy ra, hãy thêm một số để đếm và lưu số đó trong một mảng m. Vì vậy, m đang giữ tất cả các số đếm và một mảng q khác đang giữ giá trị cuối cùng mà chúng ta so sánh.Thuật toán để tính toán chế độ
Ví dụ: là danh sách của tôi là {1, 1, 1, 1, 2, 2, 2}
sau đó tôi sẽ phải m[0] = 4 q[0] = 1 and then m[1] = 3 and q[1] = 2.
để chế độ là q[0] = 1;
tiếc là tôi đã không thành công cho đến nay. hy vọng ai đó có thể giúp đỡ.
float mode(int x[],int n)
{
//Copy array and sort it
int y[n], temp, k = 0, counter = 0, m[n], q[n];
for(int i = 0; i < n; i++)
y[i] = x[i];
for(int pass = 0; pass < n - 1; pass++)
for(int pos = 0; pos < n; pos++)
if(y[pass] > y[pos]) {
temp = y[pass];
y[pass] = y[pos];
y[pos] = temp;
}
for(int i = 0; i < n;){
for(int j = 0; j < n; j++){
while(y[i] == y[j]) {
counter++;
i++;
}
}
m[k] = counter;
q[k] = y[i];
i--; //i should be 1 less since it is referring to an array subscript
k++;
counter = 0;
}
}
Bạn không trả lại bất cứ điều gì từ chức năng của bạn. Nó là khá không rõ ràng với tôi những gì bạn có nghĩa là với * chế độ * và/hoặc những gì kết quả của chức năng nên được. Nếu nó phải là trung bình của tất cả các giá trị, chỉ có thể 'trả về std :: tích lũy (x, x + n, 0,0)/n;'. BTW, C++ không có mảng có kích thước thay đổi. Tuy nhiên, bạn có thể sử dụng 'std :: vector y (n);' thay vào đó. –
@ DietmarKühl Chức năng chưa hoàn thành. Theo chế độ tôi có nghĩa là giá trị xảy ra thường xuyên nhất trong mảng. Tôi không sử dụng một mảng có kích thước biến vì kích thước của mảng là tham số n. –
Bạn có thể muốn xem 'std :: map' hoặc 'std :: unordered_map' để đếm số lần mỗi giá trị xuất hiện. Thay vào đó, thay vào đó, thay vào đó, hãy sử dụng tùy chọn Boost ['bimap'] (http://www.boost.org/doc/libs/release/libs/bimap/doc/html/index.html). –