• 编程能力提升系列: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;
    }
    
  • 相关阅读:
    问题排查
    代码
    前端
    即时通信系统 偶尔看到 就想学着做一下
    Oracle 笔记
    javaweb dev 入
    mysql安装
    windows下安装nginx
    spring MVC上传附件
    mysql+mybatis递归调用
  • 原文地址:https://www.cnblogs.com/markkang/p/16387236.html
Copyright © 2020-2023  润新知