程序 使用 C++ 中的函数测试 4x4 矩阵是否是魔方

Program To Test whether or not a 4x4 matrix is a magic square using functions in C++

本文关键字:4x4 是否是 魔方 测试 函数 使用 C++ 程序      更新时间:2023-10-16

这是我所拥有的。 我让它输出大部分总和,这样我就可以检查那里的值。我认为问题在于存储列总和的数组中元素的值。 我将非常感谢任何反馈。

#include <iostream>
#include <cmath>
using namespace std;
void fillMatrix(int matrix[][4],const int SIZE);
int rowSum(int matrix[][4],const int SIZE,int row[]);
int columnSum(int matrix[][4], const int SIZE, int column[]);
bool isMagic(int matrix[][4], const int SIZE,int row[],int column[]);
int main()
{
const int SIZE=4;
int matrix[SIZE][SIZE];
int row[4],column[4];//arrays to be filled with row and column sums.
char response=0;
cout<<"This program determines whether or not a 4x4 square matrix is a magic square.n";
do
{
fillMatrix(matrix,SIZE);
rowSum(matrix,SIZE,row);
columnSum(matrix,SIZE,row);

if(isMagic(matrix,SIZE,row,column))
cout<<"This is a magic square.nn";
else {
cout<<"This is not a magic square.nn";
}
cout<<"To end this program, enter q. To check another matrix, enter any other letter.n";
cin>>response;
}while(response!='q'&&response!='Q');
return 0;
}
void fillMatrix(int matrix[][4],const int SIZE)
{
for(int i=0;i<4;i++)
{
cout<<"Enter four values for row "<<i+1<<".n";
for(int j=0;j<4;j++)
{
cin>>matrix[i][j];
}
}
}
int rowSum(int matrix[][4],const int SIZE,int row[4])
{ 
int i=0;
int rowsum=0;
for(i=0;i<4;i++)
{
rowsum=0;
for(int j=0;j<4;j++)
{
rowsum+=matrix[i][j];
}
row[i]=rowsum;
cout<<row[i]<<endl;
}
return row[i];
}
int columnSum(int matrix[][4], const int SIZE, int column[4])
{
int j=0;
int columnsum=0;
for(j=0;j<4;j++)
{
columnsum=0;
for(int i=0;i<4;i++)
{
columnsum+=matrix[i][j];
}
column[j]=columnsum;
cout<<column[j]<<endl;
}
return column[j];
}
bool isMagic(int matrix[][4], const int SIZE,int row[4],int column[4])
{
int rightdiagonalsum=0, leftdiagonalsum=0, check;
for(int i=0;i<4;i++)
{
rightdiagonalsum+=matrix[i][i];
}
cout<<rightdiagonalsum<<endl;
for(int i=0;i<4;i++)
{
leftdiagonalsum+=matrix[i][3-i];
}
cout<<leftdiagonalsum<<endl;
for(int i=1;i<4;i++)
{
if (row[i]==row[i-1])
{
check=row[i];
}
else {
return false;
}
}
for(int j=0;j<4;j++)
{
if (column[j]!=check)
{
cout<<column[j]<<"*****";//For some reason, the value of column[j] is 0.
return false;
}
}
if (rightdiagonalsum!=check||leftdiagonalsum!=check)
{
return false;
}
return true;
}

此代码:

rowSum(matrix,SIZE,row);
columnSum(matrix,SIZE,row);

应该是:

rowSum(matrix,SIZE,row);
columnSum(matrix,SIZE,column);

因此,代码中的column数组值为零,原因很简单,您从未初始化过它。

除了此处的数组末尾之外,您还可以访问更多内容:

return row[i];

在这里:

return column[j];

在这两个点上,ij的值都4。如果在for语句中声明循环变量,则可以避免此类错误。这将限制这些变量的范围。

要解决此问题,请分别返回rowsumcolumnsum

我确实想知道各种SIZE声明有什么用途,因为您的硬代码到处都是 4 的值。