【发布时间】:2013-04-22 19:39:01
【问题描述】:
我需要编写一个程序,从用户定义的文件中获取一个 3x3 矩阵,将其打印出来,然后确定它是否为magic square。
我的最新版本有一些我不知道如何解决的问题,我为此困惑了好几个小时。从尝试在网络上寻找解决方案到再次复习基础知识,我已经完成了所有工作。
我尝试了 David Brown 的解决方案,但我意识到我们彼此误解了。
我希望用户输入文件名,程序从中获取 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;
}
【问题讨论】:
-
您的具体问题是什么?
-
编译器为我提供了这个:C:\programs\c\maagiav1.cpp: In function `int main()': C:\programs\c\maagiav1.cpp:56: error: no匹配 'fout
-
而且编译器非常正确,没有
operator<<重载以std::string作为左侧参数。你的意思是fout可能是某种文件流吗? -
@David,是的,我想将它用作文件输出的文件流