• 编程能力提升系列: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;
    }
    
  • 相关阅读:
    mysql存储过程(查询数据库内表 游标循环 if判断 插入别的表内)
    Java中调用文件中所有bat脚本
    读取pdf内容分页和全部
    前向传播
    Broadcasting 维度扩张的手段
    维度变换
    Selective Indexing
    tensorflow索引和切片
    创建tensor
    c++线程中使用detach()导致的内存非法引用问题
  • 原文地址:https://www.cnblogs.com/markkang/p/16387236.html
Copyright © 2020-2023  润新知