我需要在矩陣中找到最常見的元素,然后列印出來。如果有多個最頻繁的元素,程式應該列印其中最小的一個。
我的查找一維陣列的最大元素的代碼如何在矩陣(二維陣列)中實作?
#include <stdio.h>
void main() {
int i, j, k = 0, m = 3, n = 4, vel = 8, count = 0, maxCount = 0;
double mat[3][4], maxElement, arr[100] = { 1.3, 4.2, 1.3, 5, 4.2, 6.8, 3.7 };
for (i = 0; i < m; i )
for (j = 0; j < n; j )
scanf("%lf", &mat[i][j]);
for (i = 0; i < vel; i ) {
for (j = i 1; j < vel; j ) {
if (arr[i] == arr[j]) {
count ;
if (count > maxCount)
maxElement = arr[j];
}
}
}
printf("Most frequent is: %g", maxElement);
}
uj5u.com熱心網友回復:
您的演算法不適用于 1D 矩陣,但一旦固定,它可以用于 2D 矩陣不變:
#include <stdio.h>
double find_most_frequent(const double *arr, size_t vel) {
size_t i, j, maxcount = 0, mostfreq = 0;
for (i = 0; i < vel; i ) {
size_t count = 1;
for (j = i 1; j < vel; j ) {
if (arr[i] == arr[j]) {
count ;
}
if (maxcount < count || (maxcount == count && arr[mostfreq] < arr[i])) {
maxcount = count;
mostfreq = i;
}
}
return arr[mostfreq];
}
#define ROWS 3
#define COLS 4
int main() {
double mat[ROWS][COLS];
double arr[] = { 1.3, 4.2, 1.3, 5, 4.2, 6.8, 3.7 };
for (int i = 0; i < ROWS; i ) {
for (int j = 0; j < COLS; j ) {
if (scanf("%lf", &mat[i][j]) != 1)
return 1;
}
}
printf("Most frequent in array is: %g\n", find_most_frequent(arr, sizeof(arr) / sizeof(arr[0]));
printf("Most frequent in matrix is: %g\n", find_most_frequent(&mat[0][0], sizeof(mat) / sizeof(mat[0][0]));
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430171.html
上一篇:在C中使用指標回圈
下一篇:我要去哪里越界?
