using System;
using System.Collections.Generic;
using System.Text;
///这个可以运行代码还没有简化这但时间在做项目有时间了在
namespace 计算题
{
class Program
{
static int[] num = new int[9] {4,5,8,7,2,1,3,6,9};
static void Main(string[] args)
{
///每行相加等15
bool yRow = true;
for (int i = 0; i < 8; i++)
{
for (int j = i + 1; j < 8; j++)
if (15 == (num[0] + num[i + 1] + num[j + 1]))
{
int tab = num[1];
num[1] = num[i + 1];
num[i + 1] = tab;
tab = num[2];
num[2] = num[j + 1];
num[j + 1] = tab;
j = 7;
i = 8;
}
}
for (int i = 3; i < 8; i++)
{
for (int j = i + 1; j < 8; j++)
if (15 == (num[3] + num[i + 1] + num[j + 1]))
{
int tab = num[4];
num[4] = num[i + 1];
num[i + 1] = tab;
tab = num[5];
num[5] = num[j + 1];
num[j + 1] = tab;
j = 7;
i = 8;
yRow = false;
}
}
if (yRow)
{
for (int i = 0; i < 8; i++)
{
for (int j = i + 1; j < 8; j++)
if (15 == (num[0] + num[i + 1] + num[j + 1]))
{
int tab = num[1];
num[1] = num[i + 1];
num[i + 1] = tab;
tab = num[2];
num[2] = num[j + 1];
num[j + 1] = tab;
}
}
}
for (int i = 3; i < 8; i++)
{
for (int j = i + 1; j < 8; j++)
if (15 == (num[3] + num[i + 1] + num[j + 1]))
{
int tab = num[4];
num[4] = num[i + 1];
num[i + 1] = tab;
tab = num[5];
num[5] = num[j + 1];
num[j + 1] = tab;
j = 7;
i = 8;
}
}
///每列相加等15
for(int i=3;i<6;i++)
{
for (int j = 6; j < 9; j++)
{
if (15 == (num[0] + num[i] + num[j]))
{
int tab = num[3];
num[3] = num[i];
num[i] = tab;
tab = num[6];
num[6] = num[j];
num[j]=tab;
i = 6;
j = 9;
}
}
}
bool yesNO = true;
for (int i = 4; i < 6; i++)
{
for (int j = 7; j < 9; j++)
{
if (15 == (num[1] + num[i] + num[j]))
{
int tab = num[4];
num[4] = num[i];
num[i] = tab;
tab = num[7];
num[7] = num[j];
num[j] = tab;
i = 6;
j = 9;
yesNO=false;
}
}
}
if(yesNO)
for (int i = 3; i < 6; i++)
{
for (int j = 7; j < 9; j++)
{
if (15 == (num[0] + num[i] + num[j]))
{
int tab = num[3];
num[3] = num[i];
num[i] = tab;
tab = num[6];
num[6] = num[j];
num[j] = tab;
}
}
}
for (int i = 4; i < 6; i++)
{
for (int j = 7; j < 9; j++)
{
if (15 == (num[1] + num[i] + num[j]))
{
int tab = num[4];
num[4] = num[i];
num[i] = tab;
tab = num[7];
num[7] = num[j];
num[j] = tab;
i = 6;
j = 9;
}
}
}
///有一交叉等15
do
{
tab();
} while (15 != num[0] + num[4] + num[8] && 15 != num[2] + num[4] + num[6]);
if (15 == num[0] + num[4] + num[8] && 15 != (num[2] + num[4] + num[6]))
{
for (int i = 0; i < 8;i+=3 )
{
int tab = num[i];
num[i] = num[i+2];
num[i+2] = num[i+1];
num[i+1] = tab;
}
for (int i = 0; i < 3; i++)
{
int tab = num[i];
num[i] = num[i + 6];
num[i + 6] = num[i + 3];
num[i + 3] = tab;
}
}
if (15 != num[2] + num[4] + num[6])
{
for (int i = 8; i > 0;i-=3)
{
int tab = num[i];
num[i] = num[i - 2];
num[i - 2] = num[i - 1];
num[i - 1] = tab;
}
for (int i = 3; i >6; i++)
{
int tab = num[i];
num[i] = num[i - 3];
num[i - 3] = num[i+3];
num[i +3] = tab;
}
}
if (15 == num[2] + num[4] + num[6]&&15 != num[0] + num[4] + num[8])
{
for (int i = 0; i < 8; i += 3)
{
int tab = num[i];
num[i] = num[i + 1];
num[i + 1] = num[i + 2];
num[i + 2] = tab;
}
for (int i = 0; i < 3; i++)
{
int tab = num[i];
num[i] = num[i + 6];
num[i + 6] = num[i + 3];
num[i + 3] = tab;
}
}
if (15 != num[0] + num[4] + num[8])
{
for (int i = 8; i > 0; i -= 3)
{
int tab = num[i];
num[i] = num[i - 2];
num[i - 2] = num[i - 1];
num[i - 1] = tab;
}
for (int i = 3; i > 6; i++)
{
int tab = num[i];
num[i] = num[i - 3];
num[i - 3] = num[i + 3];
num[i + 3] = tab;
}
}
for (int i = 0; i < 9; i++)
{
Console.Write(num[i]+" ");
if ((i + 1) % 3 == 0)
Console.Write("/n");
}
}
public static void tab()
{
for (int i = 0; i < 8; i += 3)
{
int tab = num[i];
num[i] = num[i + 2];
num[i + 2] = num[i + 1];
num[i + 1] = tab;
}
}
}
}