Ciao ragazzi vi chiedo aiuto per questo esercizio che a voi risulterà banale ma non riesco a risolvere in maniera ottimale.
il testo prevede:

Scrivere un programma in linguaggio C che:
• legga da tastiera le dimensioni di una matrice (m x n) (max m = 20, max n=20)
• la riempia con valori interi positivi pseudorandom minori o uguali a 50
• esamini la matrice, e verifichi se i numeri inseriti nella matrice, compaiono esattamente lo stesso numero di volte se ciò non accade elenchi i numeri presenti nella matrice e quante volte essi appaiono.

Esempio (in grassetto l’input):
3 4
1 5 3 2
3 14 1 2
6 5 14 6
Output:
1 2 3 5 14 compaiono 2 volte nella matrice


Io l'ho risolto così:

codice:
#include <stdio.h>

#define MAXM 20
#define MAXN 20
#define MAX 50

main()
{
   int i,j,k,r,c,temp;
   int a[MAXM][MAXN];
   int conta[MAX]={0};
   
   printf("inserisci il numero di righe : ");
   scanf("%d",&r);
   
   printf("\ninserisci il numero di colonne : ");
   scanf("%d",&c);
   
   for (i=0; i<r; i++){
      for (j=0; j<c; j++){
         a[i][j]= (rand()%50)+1;
      }
   }

for (i=0; i<r; i++){
      for (j=0; j<c; j++){
         printf("%3d",a[i][j]);
            if(j==(c-1))
            printf("\n");
      }
}   
  
 for (i=0; i<r; i++){
      for (j=0; j<c; j++){
           if (a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j]){             
              temp=a[i][j];
              conta[temp]++;
              }
           
      }
 }

for (temp=1;temp<MAX;temp++){
if (conta[temp]>0)
printf("%5d compare %d volte nella matrice\n",temp, (conta[temp]+1));
}

 getch();
}
Il problema e che non considera l'ultimo ingresso della matrice

Per spiegare meglio cosa intendo ho aggiunto uno screen del programma eseguito:


come vedete funziona eccetto che per l'ultima entrata della matrice, ma non arrivo a capire dov'è l'errore o gli errori.
Sono un pò :berto:


Grazie