Мне нужно суммировать и выводить строки, столбцы и основные диагонали. Может кто-нибудь сказать, пожалуйста, что я делаю не так? Это код, который мне дали использовать, но я не могу заставить его выводить свои суммы. Я поместил комментарий в код ниже, где я считаю, что моя проблема существует, где она начинает суммироваться и где она останавливается. Я был бы признателен за любую помощь, так как у меня возникли проблемы с выяснением этого самостоятельно. Выходные данные должны иметь матрицу 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
Использование правильной индексации позволит заполнить ваш 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
Других решений пока нет …