fork download
  1. #include <iostream>
  2.  
  3. struct Matrix
  4. {
  5. int data[9];
  6. // indices
  7. // 0 1 2
  8. // 3 4 5
  9. // 6 7 8
  10. };
  11.  
  12. int sumOfLine(Matrix& m, int lineNo) // 0, 1 or 2
  13. {
  14. return m.data[3*lineNo + 0] + m.data[3*lineNo + 1] + m.data[3*lineNo + 1];
  15. }
  16.  
  17. int sumOfColumn(Matrix& m, int columnNo) // 0, 1 or 2
  18. {
  19. return m.data[columnNo + 3*0] + m.data[columnNo + 3*1] + m.data[columnNo + 3*2];
  20. }
  21.  
  22. int sumOfForwardDiag(Matrix& m)
  23. {
  24. return m.data[6] + m.data[4] + m.data[2];
  25. }
  26.  
  27. int sumOfBackwardDiag(Matrix& m)
  28. {
  29. return m.data[0] + m.data[4] + m.data[8];
  30. }
  31.  
  32. bool isMagicSquare(Matrix& m)
  33. {
  34. bool isMagicSquare = true;
  35. int targetSum = sumOfLine(m, 0);
  36. for(int i=0; i<3; i++)
  37. {
  38. if(sumOfLine(m, i) != targetSum)
  39. {
  40. isMagicSquare = false;
  41. }
  42. }
  43.  
  44. for(int i=0; i<3; i++)
  45. {
  46. if(sumOfColumn(m, i) != targetSum)
  47. {
  48. isMagicSquare = false;
  49. }
  50. }
  51.  
  52. if(sumOfForwardDiag(m) != targetSum)
  53. isMagicSquare = false;
  54.  
  55. if(sumOfBackwardDiag(m) != targetSum)
  56. isMagicSquare = false;
  57.  
  58. return isMagicSquare;
  59. }
  60.  
  61. int main(int argc, char* argv[])
  62. {
  63. Matrix m1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
  64. Matrix m2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
  65.  
  66. std::cout << "m1 is magic: " << isMagicSquare(m1) << std::endl;
  67. std::cout << "m2 is magic: " << isMagicSquare(m2) << std::endl;
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0s 2852KB
stdin
Standard input is empty
stdout
m1 is magic: 0
m2 is magic: 1