fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int eh_magico( int ** quad, int n )
  5. {
  6. int i = 0, j = 0;
  7. int x = 0, y = 0;
  8. int d1 = 0, d2 = 0;
  9.  
  10. /* Somatorio das diagonais */
  11. for( i = 0; i < n; i++ )
  12. {
  13. d1 += quad[i][i];
  14. d2 += quad[n - i - 1][i];
  15. }
  16.  
  17. /* Verifica se diagonais sao iguais */
  18. if( d1 != d2 )
  19. return -1;
  20.  
  21. for( i = 0; i < n; i++ )
  22. {
  23. x = 0;
  24. y = 0;
  25.  
  26. /* Somatorio linha e coluna */
  27. for( j = 0; j < n; j++ )
  28. {
  29. x += quad[i][j];
  30. y += quad[j][i];
  31. }
  32.  
  33. /* Verifica linha e coluna */
  34. if( x != d1 || y != d1 )
  35. return -1;
  36. }
  37.  
  38. /* Eh magico! */
  39. return d1;
  40. }
  41.  
  42.  
  43. int main( void )
  44. {
  45. int lin, col, dim;
  46. int ** quadrado_misterioso;
  47.  
  48. /* Le dimensoes */
  49. scanf( "%d", &dim );
  50.  
  51. /* Aloca memoria para n linhas */
  52. quadrado_misterioso = malloc( dim * sizeof(int*) );
  53.  
  54. /* Para cada linha */
  55. for( lin = 0; lin < dim; lin++ )
  56. {
  57. /* Aloca memoria para n colunas da linha atual */
  58. quadrado_misterioso[lin] = malloc( dim * sizeof(int) );
  59.  
  60. /* Para cada coluna da linha */
  61. for( col = 0; col < dim; col++ )
  62. scanf( "%d", &quadrado_misterioso[lin][col] );
  63. }
  64.  
  65. /* Verifica se eh um quadrado magico */
  66. printf("%d\n", eh_magico( quadrado_misterioso, dim ) );
  67.  
  68. /* Libera memoria ocupada pelo quadrado */
  69. for( lin = 0; lin < dim; lin++ )
  70. free(quadrado_misterioso[lin]);
  71. free(quadrado_misterioso);
  72.  
  73. return 0;
  74. }
Success #stdin #stdout 0s 4256KB
stdin
5
1 	23 	16 	4 	21
15 	14 	7 	18 	11
24 	17 	13 	9 	2
20 	8 	19 	12 	6
5 	3 	10 	22 	25

stdout
65