0

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

1 に答える 1

1

適切なインデックスを使用すると、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
于 2012-12-09T04:37:34.383 に答える