一、題目
描述
給定一個僅包含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/
本文著作權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,并保留此段宣告,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492399.html
標籤:.NET技术
