C/C++

Помогите найти ошибку в коде!!!

При отладке не выводит максимальное число встречающееся более одного раза и делящееся на 3 без остатка.
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <clocale>
void main()
{
setlocale(LC_ALL, "Russian");
int a[100][100],m, n, i, j, p, * P, s = 0, max = 0;
printf("Введите кол-во строк: ");
scanf_s("%d", &m);
printf("Введите кол-во столбцов: ");
scanf_s("%d", &n);
if (m > n)
{
printf("\nM>N\n");
}
if (m < n)
{
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf_s("%d", &a[i][j]);
printf("Матрица\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
printf("-------------------\n");
int k = 0;
for (i = 0; i < m; i++)
{
p = 0;
for (j = 0; j < n; j++)
if (a[i][j] == 0)
p = 1;
if (p == 0) k++;
}
int f = 0, d = 0, replay = 0, plus_max = 0;
if (a[f][d] < a[m][n] && a[m][n] % 3 == 0)
{
f = m;
d = n;
replay = 0;
}
else if (a[f][d] == a[m][n])
{
replay++;
}

if (a[f][d] > max && replay > 0)
{
max = a[f][d];
plus_max = 1;
}
else printf("\nИскомое значение не найдено. \n");
printf("\nМаксимальное из чисел, встречающееся в матрице более одного раза и делящееся без остатка на 3 = %d\n", max);
printf("\nКоличество строк, не содержащих ни одного нулевого элемента = %d \n", k);
}
}
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define N 100
#define K 3
#define RAND(min, max) (rand() % ((max) - (min)) + (min))

typedef struct {
int value;
size_t count;
} Pair;

int greater(const void* a, const void* b) {
Pair aa = *((Pair*)a);
Pair bb = *((Pair*)b);
if (aa.value < bb.value) return 1;
if (aa.value > bb.value) return -1;
return 0;
}

int main(void) {
int matrix[N][N];
size_t n = 0, m = 0, i, j, k, g;
Pair* box = NULL;
system("chcp 1251 > nul");
while (!n || n > N) {
printf("Введите количество строк: ");
scanf_s("%u", &n);
}
while (!m || m > N) {
printf("Введите количество столбцов: ");
scanf_s("%u", &m);
}
puts("");
k = n * m;
box = (Pair*)malloc(k * sizeof(Pair));
srand((unsigned)time(NULL));
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
matrix[i][j] = RAND(-50, 51);
printf("%5i", matrix[i][j]);
}
puts("");
}
puts("");
k = 0;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
if (0 == matrix[i][j] % K) {
for (g = 0; g < k; ++g) {
if (box[g].value == matrix[i][j]) {
++box[g].count;
break;
}
}
if (g == k) {
box[g].value = matrix[i][j];
box[g].count = 1;
++k;
}
}
}
}
if (!k) puts("Матрица не содержит элементов удовлетвояющих условию задания.");
else {
int max;
qsort(box, k, sizeof(Pair), greater);
for (i = 0; i < k; ++i) {
if (box[i].count > 1) {
max = box[i].value;
break;
}
}
if (i == k) puts("Матрица не содержит элементов удовлетвояющих условию задания.");
else printf("Максимум матрицы кратный %i и встречющися более двух раз равен %u\n", K, max);
}
free(box);
system("pause > nul");
return 0;
}
Эдуард Ким
Эдуард Ким
70 256
Лучший ответ