魔方,我无法让这个对行、列和对角线求和

Magic Square, I can't get this to sum the rows, columns, and diagonals

本文关键字:求和 对角线 魔方      更新时间:2023-10-16

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