не могу найти ошибку c++
тз: В двумерном динамическом массиве определить наиболее часто встречающийся элемент. Если таковых несколько, то в качестве ответа принять элемент с наибольшей суммой индексов
проблема: значения выводит, но рандомное повторяющееся, а не с наибольше суммой индексов
быстрый экскурс по коду: я перевожу двумерный массив в одномерный и уже в нем все сортирую
#include <iomanip>
using namespace std;
int main()
{
int n, nSquare = 0, kj = 0, counter = 1, newcounter = 1, searchValue = 0, sumIndex = 0, auxiliarySumIndex = 1, value = 0;
setlocale(LC_ALL, "");
cout << "Введите N: ";
cin >> n;
cout << "\n" << "Двумерный массив: \n" << endl;
nSquare = n * n;
int** arr = new int* [n];
int* arr2 = new int[nSquare];
srand(time(0));
for (int i = 0; i < n; i++) { // наполняем двумерный массив
arr[i] = new int[n];
for (int j = 0; j < n; j++) {
arr[i][j] = -3 + rand() % 10;
cout << setw(4) << arr[i][j];
}
cout << endl;
}
for (int i = 0; i < n; i++) { // делаем из двумерного массива одномерный
for (int j = 0; j < n; j++, kj++) {
arr2[kj] = arr[i][j];
}
}
for (int k2 = 0; k2 < nSquare; k2++) { // меняем значения местами по возрастанию
for (int i = 0; i < nSquare - 1; i++) {
if (arr2[i] > arr2[i + 1]) {
int swap = arr2[i];
arr2[i] = arr2[i + 1];
arr2[i + 1] = swap;
}
}
}
cout << "\n" << "\n" << "Упорядоченный одномерный массив: \n" << endl;
for (int i = 0; i < nSquare; i++) {
cout << arr2[i] << " ";
}
cout << "\n" << endl;
for (int i = 0; i < nSquare; i++) { //ищем большее количесво повторений
if (arr2[i] == arr2[i + 1]) {
counter++;
}
else {
if (newcounter <= counter) {
newcounter = counter;
}
counter = 1;
}
}
counter = 1;
cout << "\n" << "Найденные значения с наибольшим количеством повторений в формате 'количество повторений -> значение': \n" << endl;
for (int i = 0; i < nSquare; i++) { // ищем числа, с большим количесвом повторений
if (arr2[i] == arr2[i + 1]) {
counter++;
}
else {
if (newcounter <= counter) {
if (counter > 1) cout << counter << " -> " << arr2[i - 1] << endl;
searchValue = arr2[i - 1];
for (int si = 0; si < n; si++) { // сравниваем и находим суммы индексов
for (int sj = 0; sj < n; sj++) {
if (arr[si][sj] == searchValue) {
auxiliarySumIndex = auxiliarySumIndex + si + sj;
}
}
}
if (auxiliarySumIndex > sumIndex) {
sumIndex = auxiliarySumIndex;
value = arr2[i - 1];
}
}
counter = 1;
}
}
cout << "\n" << "\n" << "Число с наибольшим количеством повторений: " << value << "\n" << endl;
system("pause");
}```
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Один из способов - заведите одномерный массив структур {значение; сумма индексов}
arr2[kj].value = arr[i][j];
arr2[kj].sum = i + j;
Далее понятно, что делать?