https://www.hackerrank.com/challenges/magic-square-forming/problem
题目要求把任意一个3阶矩阵转化为Magic Square 要求Cost最低
Magic Square就是将1至9 9个数放入矩阵中 每行每列对角之和相等
可以发现Magic Square只有8种情况,只要将给出的3阶矩阵与8种情况对比查找最少的就可以
class Solution
{
// Complete the formingMagicSquare function below.
static int formingMagicSquare(int[][] s)
{
int[][ ,] magicSquareList = {new int[3,3]{{8,1,6},{3,5,7},{4,9,2}},
new int[3,3]{{6,1,8},{7,5,3},{2,9,4}},
new int[3,3]{{4,9,2},{3,5,7},{8,1,6}},
new int[3,3]{{2,9,4},{7,5,3},{6,1,8}},
new int[3,3]{{8,3,4},{1,5,9},{6,7,2}},
new int[3,3]{{4,3,8},{9,5,1},{2,7,6}},
new int[3,3]{{6,7,2},{1,5,9},{8,3,4}},
new int[3,3]{{2,7,6},{9,5,1},{4,3,8}}};
int cost = 0;
int minCost = 100;
for (int i = 0; i < 8; i++)
{
cost = costToMagicSquare(s, magicSquareList[i]);
if(minCost > cost)
{
minCost = cost;
}
}
return minCost;
}
static void Main(string[] args)
{
TextWriter textWriter = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);
int[][] s = new int[3][];
for (int i = 0; i < 3; i++)
{
s[i] = Array.ConvertAll(Console.ReadLine().Split(' '), sTemp => Convert.ToInt32(sTemp));
}
int result = formingMagicSquare(s);
textWriter.WriteLine(result);
textWriter.Flush();
textWriter.Close();
}
static int costToMagicSquare(int[][] s, int[,] y)
{
int result = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
result += Math.Abs(s[i][j] - y[i,j]);
}
}
return result;
}
}
本文介绍了一个Hackerrank上的编程挑战——形成魔方矩阵。任务是将一个3x3的矩阵转换为魔方矩阵,使总成本最小。文中提供了一个解决方案,包括定义所有可能的魔方矩阵配置,并计算原始矩阵到这些配置的距离。
352

被折叠的 条评论
为什么被折叠?



