编程能力提升系列: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++代码
int MaxMatrix(vector<string> m)
{
int total = 0;
for (vector<string>::iterator iter = m.begin(); iter != m.end(); iter++)
{
//remove the commas in each string
(*iter).erase((*iter).find(','),1);
while ((*iter).find(',') != string::npos)
{
(*iter).erase((* iter).find(','), 1);
}
//calculate the maximum of the matrix
int max = 0;
int len=(*iter).length();
for (int i = 0; i < len; i++)
{
cout << *iter<<endl;
(*iter).append(string (1, (*iter)[0]));
(*iter).erase(0, 1);
int count = stoi(*iter, nullptr, 2);
max = max < count ? count : max;
}
total += max;
}
return total;
}
作者:MarkKang
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2020-06-17 一分钟搞清C++中的指向常量的指针和常量型指针