Advertisement
xerpi

P45484

Dec 8th, 2013
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. /*
  2.     Copyright (c) 2013    xerpi
  3. */
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. using namespace std;
  8.  
  9.  
  10. void read_matrix(vector< vector<int> >& m, int rows, int columns);
  11. int sum_row(const vector< vector<int> >& m, int row, int n_rows);
  12. int sum_column(const vector< vector<int> >& m, int column, int n_columns);
  13. int sum_main_diagonal_1(const vector< vector<int> >& m, int size);
  14. int sum_main_diagonal_2(const vector< vector<int> >& m, int size);
  15. bool magic_square(const vector< vector<int> >& t);
  16.  
  17.  
  18. int main()
  19. {
  20.     int n;
  21.     cin >> n;
  22.     vector< vector<int> > square(n, vector<int>(n));
  23.     read_matrix(square, n, n);
  24.     cout << magic_square(square) << endl;
  25. }
  26.  
  27. bool magic_square(const vector< vector<int> >& t)
  28. {
  29.     int size = t.size();
  30.     //Check rows
  31.     int sum = sum_row(t, 0, size);
  32.     for (int i = 1; i < size; ++i) {
  33.         int next_sum = sum_row(t, i, size);
  34.         if (sum != next_sum) return false;
  35.     }
  36.     //Check columns
  37.     for (int i = 0; i < size; ++i) {
  38.         int next_sum = sum_column(t, i, size);
  39.         if (sum != next_sum) return false;
  40.     }
  41.     //Check diagonals
  42.     return (sum == sum_main_diagonal_1(t, size)) and
  43.            (sum == sum_main_diagonal_2(t, size));
  44. }
  45.  
  46. int sum_main_diagonal_1(const vector< vector<int> >& m, int size)
  47. {
  48.     int sum = 0;
  49.     for (int i = 0; i < size; ++i) {
  50.         sum += m[i][i];
  51.     }
  52.     return sum;
  53. }
  54.  
  55. int sum_main_diagonal_2(const vector< vector<int> >& m, int size)
  56. {
  57.     int sum = 0;
  58.     for (int i = 0; i < size; ++i) {
  59.         sum += m[size-i-1][i];
  60.     }
  61.     return sum;
  62. }
  63.  
  64. int sum_column(const vector< vector<int> >& m, int column, int n_columns)
  65. {
  66.     int sum = 0;
  67.     for (int i = 0; i < n_columns; ++i) {
  68.         sum += m[i][column];
  69.     }
  70.     return sum;
  71. }
  72.  
  73. int sum_row(const vector< vector<int> >& m, int row, int n_rows)
  74. {
  75.     int sum = 0;
  76.     for (int i = 0; i < n_rows; ++i) {
  77.         sum += m[row][i];
  78.     }
  79.     return sum;
  80. }
  81.  
  82.  
  83. void read_matrix(vector< vector<int> >& m, int rows, int columns)
  84. {
  85.     for (int i = 0; i < rows; ++i) {
  86.         for (int j = 0; j < columns; ++j) {
  87.             cin >> m[i][j];
  88.         }      
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement