0

我需要求和并输出行、列和主对角线。有人可以告诉我我做错了什么吗?这是我被赋予使用的代码,但我似乎无法让它输出我的总和。我在下面的代码中添加了一条评论,我相信我的问题存在,它从哪里开始求和,从哪里停止。我将不胜感激任何帮助,因为我无法自己解决这个问题。输出应该是一个 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
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 回答