我需要编写一个程序,从用户定义的文件中获取一个 3x3 矩阵,打印它,然后确定它是否是一个幻方。
我的最新版本有一些我不知道如何解决的问题,我已经为此困惑了好几个小时。从尝试在网络上寻找解决方案到再次查看基础知识,我已经完成了所有工作。
我尝试了大卫布朗的解决方案,但我意识到我们彼此误解了。
我希望用户输入文件名,程序从中获取 3x3 矩阵(使用 ifstream),打印矩阵,然后确定它是否是幻方。
#include <iostream>
#include <fstream>
#include <iomanip> #include <string>
using namespace std;
int main()
{
int n = 3;
int row, col, r, c, i, j, k, diag=0;
int magic[19][19];
std::string fout = "my_file_name.txt";
std::ifstream ifs(fout.c_str());
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=0; r<n; 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;
}