📄 func.cpp
字号:
/*
Name: func.c
Author: 张 亮 (zhangliangsd@hotmail.com)
Description: 魔方类
Date: 25-03-03 06:28
Copyright: You can copy free on internet, Please keep this header
when you copy it.
*/
#include <iostream>
#include "func.h"
using std::cin;
Matrix::Matrix()
{
M=10;
a.resize(10);
for (int i=0; i<10; ++i)
a[i].resize(M);
init();
}
Matrix::Matrix(int size)
{
M = size;
a.resize(M);
for (int i=0; i<M; ++i)
a[i].resize(M);
init();
}
void Matrix::init()
{
for (int i=0; i<M; i++)
for (int j=0; j<M; j++)
a[i][j]=0;
return;
}
Matrix::Matrix(Matrix& m):sum(0)
{
for(int i=0; i<M; ++i)
for(int j=0; j<M; ++j)
a[i][j] = m.a[i][j];
}
void Matrix::print() const
{
print(std::cout);
}
void Matrix::print(ostream& o) const
{
if(M%2 == 0) return;
for (int i=0; i<M; i++)
{
for(int j=0; j<M; j++)
{
if (M < 100) o.width(5);
else o.width(10);
o << a[i][j];
}
o << std::endl;
}
return;
}
void Matrix::input()
{
for ( int i=0; i<M; i++)
for(int j=0; j<M; j++)
cin >> a[i][j];
return;
}
void Matrix::rright()
{
int tmp=0;
Matrix m;
int i,j;
for (i = 0; i < M; ++i)
for (j = 0; j < M; ++j)
{
m.a[j][M-1-i] = a[i][j];
//m.mprint();
}
for (i = 0; i < M; ++i)
for (j = 0; j < M; ++j)
a[i][j] = m.a[i][j];
return;
}
void Matrix::rleft()
{
int tmp=0;
Matrix m;
int i,j;
for (i = 0; i < M; ++i)
for (j = 0; j < M; ++j)
{
m.a[M-1-j][i] = a[i][j];
//m.mprint();
}
for (i = 0; i < M; ++i)
for (j = 0; j < M; ++j)
a[i][j] = m.a[i][j];
return;
}
//Func: IsMeFang
//Return: 0 for fail, 1 for good
int MFMatrix::IsMefang()
{
sum=0;
int _sum=0;
if(M%2 == 0) return 0;
for(int j=0; j<M; j++) sum+=a[0][j]; //get sum for a[0][j]
for (int i=1; i<M; i++) //line
{
_sum=0;
for (j=0; j<M; j++)
_sum += a[i][j];
if (_sum != sum) return 0;
}
for (j=0; j<M; j++) //col
{
_sum=0;
for (i=0; i<M; i++)
_sum += a[i][j];
if (_sum != sum) return 0;
}
_sum =0; //left coner line
for (i=0; i<M; i++)
{
_sum += a[i][i];
}
if (_sum != sum) return 0;
_sum =0; //right coner line
for (i=0; i<M; i++)
{
_sum += a[M-1-i][i];
}
if (_sum != sum) return 0;
return 1; //rich here will be good
}
void MFMatrix::creat()
{
if ( M%2 == 0)
{
std::cout <<"\n======NOTE=====\n"
<<"不能求奇数维的魔方阵\n";
return; //偶数
}
int i=0;
int j= (M-1)/2; //奇数中间
int count = 1;
for(;;)
{
if (i == 0 && j == M-1) {a[i][j] = count++;++i; continue; }
if (i < 0) { i = M-1; continue;}
if (j > M-1) { j = 0; continue;}
if(count == M*M)
{
//make sure i,j is good
if (i>0 && i<M && j>0 && j<M) break;
continue;
}
if(a[i][j] !=0 ) {i+=2; j-=1; continue;}
a[i][j] = count++;
--i; ++j;
}
a[i][j] = count;
return;
}
ostream& operator<<(ostream& o, const Matrix& m)
{
m.print(o);
return o;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -