Магический квадрат, я не могу получить это, чтобы сложить строки, столбцы и диагонали

Мне нужно суммировать и выводить строки, столбцы и основные диагонали. Может кто-нибудь сказать, пожалуйста, что я делаю не так? Это код, который мне дали использовать, но я не могу заставить его выводить свои суммы. Я поместил комментарий в код ниже, где я считаю, что моя проблема существует, где она начинает суммироваться и где она останавливается. Я был бы признателен за любую помощь, так как у меня возникли проблемы с выяснением этого самостоятельно. Выходные данные должны иметь матрицу 3 x 3, в которой суммы строк, столбцов и диагоналей в четвертой строке и столбце равны 15. Мой результат не суммирует строки, столбцы и диагонали.

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{

int n = 3;
int row, col, r, c, i, j, k, diag=0;
int magic[19][19];
ofstream fout;
fout.open("p4-out.txt");

for(j=0 ; j<n+1 ; j++){
for(k=0 ; k<n+1 ; k++)
magic[j][k] = 0;}

row=1; col=(n+1)/2;
magic[row-1][col-1]=1;

for(i=2 ; i<=(n*n) ; i++){
row-=1; col-=1;
if(row==0 && col==0){col++; row+=2;}
else if(row==0) row=n;
else if(col==0) col=n;
else if(magic[row-1][col-1]!=0)
{col++; row+=2;}
magic[row-1][col-1]=i;}

for(r=0; r<n; r++){
for(c=0; c<n; c++)
magic[r][n]+=magic[r][c];}

for(c=0; c<n; c++){
for(r=0; r<n; r++)
magic[n][c]+=magic[r][c];}

for(r=0; r<n; r++){
magic[n][n]+=magic[r][r];}

for(r=1; r<(n-1); r++){
c = n - r + 1;
diag+=magic[r][c];}

for(r=0; r<(n+1) ; r++){
fout << endl;
for(c=0; c<(n+1) ; c++)
{fout << setw (5) << magic[r][c];}
fout << endl;}
return 0;
}// This my output.
15 <---// I need this 15 to go

6    1    8   15                       |
|
7    5    3   15                       |
|
2    9    4   15                       |
|
[15]  15   15   15   15                       |
^-------------<------------<----------<-------|
here

0

Решение

Использование правильной индексации позволит заполнить ваш sum строки и столбцы тоже попробуйте:

 for(r=0; r<n; r++){                       //Where it should start summing
for(c=0; c<n; c++){
magic[r][n]+=magic[r][c];}
}

for(c=0; c<n; c++){
for(r=0; r<n; r++){
magic[n][c]+=magic[r][c];}
}
for(r=0; r<n; r++){
magic[n][n]+=magic[r][r];
}
for(r=0; r<n; r++){
c = n - r + 1;
diag+=magic[r][c];}              //where it should stop summing
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]