一、題目 描述 給定一個僅包含0和1的n*n二維矩陣,請計算二維矩陣的最大值。 計算規則如下 1、每行元素按下標順序組成一個二進位數(下標越大約排在低位),二進位數的值就是該行的值,矩陣各行之和為矩陣的值 2、允許通過向左或向右整體迴圈移動每個元素來改變元素在行中的位置 比如:[1,0,1,1,1] ...
一、題目
描述
給定一個僅包含0和1的n*n二維矩陣,請計算二維矩陣的最大值。
計算規則如下
1、每行元素按下標順序組成一個二進位數(下標越大約排在低位),二進位數的值就是該行的值,矩陣各行之和為矩陣的值
2、允許通過向左或向右整體迴圈移動每個元素來改變元素在行中的位置
比如:[1,0,1,1,1] 向右整體迴圈移動兩位 [1,1,1,0,1], 二進位數為11101 值為29
[1,0,1,1,1] 向左整體迴圈移動兩位 [1,1,1,1,0], 二進位數為11110 值為30
輸入描述
1.數據的第一行為正整數,記錄了N的大小, 0<N<=20
2.輸入的第2到n+1行為二維矩陣信息, 行內元素邊角逗號分割
輸出描述
矩陣的最大值
示例1
輸入
5
1,0,0,0,1
0,0,0,1,1
0,1,0,1,0
1,0,0,1,1
1,0,1,0,1
輸出
122
說明第一行向右整體迴圈移動一位,得到最大值 11000 24 因此最大122
二、代碼
1. C#代碼
public static int Matrix2DMaxValue(int n, int[,] matrix)
{
int result = 0;
int rownumber = matrix.GetLength(0);
int colnumber = matrix.GetLength(1);
StringBuilder temp = new StringBuilder() ;
for (int i = 0; i < rownumber; i++)
{
int max = 0;
for (int j = 0; j < colnumber; j++)
{
for (int k = j; k < colnumber; k++)//first part
{
temp.Append(matrix[i, k].ToString());
}
for (int k = 0; k < j; k++)//last part
{
temp.Append(matrix[i, k].ToString());
}
Debug.WriteLine(temp.ToString());
max = Math.Max(max, Convert.ToInt32(temp.ToString(),2));
temp.Clear();
}
result += max;
}
return result;
}
public static int Matrix2DMaxValue(int n,string[] matrix)
{
int result = 0;
StringBuilder temp = new StringBuilder();
for (int i = 0; i < n; i++)
{
temp.Clear();
temp.Append(matrix[i].Replace(",", string.Empty));
int max = 0;
for (int j = 0; j < n; j++)
{
char firtchar = temp[0];
temp.Remove(0, 1).Append(firtchar);
max = Math.Max(max, Convert.ToInt32(temp.ToString(), 2));
}
result += max;
}
return result;
}
2. C++代碼
作者:MarkKang
出處:https://www.cnblogs.com/markkang/
本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。