魔方

// 功能:3X3的矩阵,有1到3*3=9这九个数组成,
//       如果行列与对角线的和都相等,那么就是魔方阵。
//      输出所有的3X3的魔方
// 时间 :2012年2月12日
// 开发测试环境:VC6.0
#include<iostream>
using namespace std;
#define argue a1,a2,a3,a4,a5,a6,a7,a8,a9 // 实参表
#define parameter int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9 // 形参表


bool noEqual(parameter); // 判断参数各不相等
bool magic(parameter);   // 判断当前方阵是否是魔方。
void display(parameter); // 显示魔方
int main()
{
   int argue;  // 定义方阵元素
   for ( a1 = 1; a1 <= 9; a1++)  // 遍历所有的方阵可能
   for ( a2 = 1; a2 <= 9; a2++)  // 有什么办法把这些for函数化呢?
   for ( a3 = 1; a3 <= 9; a3++)
   for ( a4 = 1; a4 <= 9; a4++)
   for ( a5 = 1; a5 <= 9; a5++)
   for ( a6 = 1; a6 <= 9; a6++)
   for ( a7 = 1; a7 <= 9; a7++)
   for ( a8 = 1; a8 <= 9; a8++)
   for ( a9 = 1; a9 <= 9; a9++)
  if ( noEqual(argue) && magic(argue) )  // 各不相等并且是魔方
      display(argue); // 显示魔方
return 0;
}


// 参数各不相等时:返回 1 ; 否则返回 0
bool noEqual( parameter )
{
bool value = false;
if ( a1 != a2 && a1 != a3 && a1 != a4 && a1 != a5 && a1 != a6 && a1 != a7 && a1 != a8 && a1 != a9)
    if ( a2 != a3 && a2 != a4 && a2 != a5 && a2 != a6 && a2 != a7 && a2 != a8 && a2 != a9)
if ( a3 != a4 && a3 != a5 && a3 != a6 && a3 != a7 && a3 != a8 && a3 != a9)
if ( a4 != a5 && a4 != a6 && a4 != a7 && a4 != a8 && a4 != a9)
if ( a5 != a6 && a5 != a7 && a5 != a8 && a5 != a9)
if ( a6 != a7 && a6 != a8 && a6 != a9)
if ( a7 != a8 && a7 != a9)
if ( a8 != a9 )
value = true;
return value;
}


// 是魔方时返回 1; 否则返回 0
bool magic( parameter )
{
bool value = false;
int t = a1 + a2 + a3;
if ( a4 + a5 + a6 == t && a7 + a8 + a9 == t )
if ( a1 + a4 + a7 == t && a2 + a5 + a8 ==t && a3 + a6 + a9 == t )
if ( a1 + a5 + a9 == t && a7 + a5 + a3 == t )
value = true;
return value;
}


// 显示魔方并计数
void display( parameter )
{
static int count = 1;
cout << "第" << count << "个魔方是:" << endl;
cout << a1 << ends << a2 << ends << a3 << endl;
cout << a4 << ends << a5 << ends << a6 << endl;
cout << a7 << ends << a8 << ends << a9 << endl;
cout << endl;
count++;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值