行、列、および主な対角線を合計して出力する必要があります。誰かが私が間違っていることを教えてもらえますか?これは私が使用するように与えられたコードですが、合計を出力するように取得できないようです。以下のコードに、問題が存在すると思われる場所、合計が開始される場所、停止する場所にコメントを付けます。私はこれを自分で理解するのに苦労しているので、助けていただければ幸いです。出力は、4番目の行と列の行、列、対角線の合計が15に等しい3 x 3の行列である必要があります。私の出力は、行、列、および対角線を合計していません。
#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