⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func.cpp

📁 用c语言对魔方阵进行编写
💻 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 + -