您的位置:时时app平台注册网站 > 编程知识 > golang 多维数组

golang 多维数组

2019-11-14 16:15

golang 代码如下:

0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2

里头定义二维数组未有啥复杂的,在赋值的进程中大家需求先定义多个风华正茂维数组 carray := make([]int, column, column),然后在赋值给外部的数组 array[i] =carray

Sample Output
15
 
难题自个儿起步用暴力法来解答,可是,通可是,超时,后来参照他事他说加以考察了须臾间别人的观念吗!没悟出那道题还足以用动归的情势解答,很震惊啊!
代码如下:
[cpp] 
//这一个程序能够求出m*n的矩阵某一块的最大值 
//这种寻找算法对的误!可是超时,由此还要更上一层楼优化算法! 
//那道题的题意说的可比模糊,标题里不曾说要多个测量检验数据,弄得作者只管理了一回,引致老是不对,又找不到难点所在! 
/*
#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=10010;
int arr[MAX];
 
int main()
{
    int s,max=-200;
    int we=0;
    int m,n;
    while(scanf("%d",&arr[0])!=EOF)
    {
    //cin>>arr[0];//输入方阵的维数
    m=n=arr[0];
    for(int i=1;i<=arr[0]*arr[0];i )
        cin>>arr[i];
 
    for(int i=1;i<=m;i )
        for(int j=1;j<=n;j )//这里是意味着块数的大小,i*j
            for(int p=1;m-p>=i-1 ;p )
                for(int q=1;n-q>=j-1 ;q )//寻觅路径,自上而下,自左向右
                {
                    int cur=p m*(q-1);
                    int count=0;
                    int temp=cur; 
                    int temp1=1;
                    s=0;
                    //cout<<"第"<<we<<"次搜索: "<<endl;
                    //cout<<"起点是 行数"<<p<<","<<"列数"<<q<<endl;
                    //cout<<"p="<<p<<",n="<<n<<endl;
                    for(int k=1;k<=i*j;k )
                    {
                        //cout<<arr[temp]<<"  ";
                        s=s arr[temp];
                        count ;
                        temp ;
                        if(count>=i)
                        {
                            temp=cur temp1*m;
                            temp1 ;
                            count=0;
                        }
                    }
                    //cout<<endl;
                    //we ;
                    if(s>max)
                    max=s;
                }
     cout<<max<<endl;
     //system("pause");
     }
    return 0;
}
*/ 
 
#include<iostream> 
#include<cstdio> 
using namespace std; 
 
int arr[101][101]; 
int sum[101],dp[101]; 
 
int main() 

     
    int i,j,k,p,n; 
    while(scanf("%d",&n)!=EOF) 
    {   
        int max=-200; 
        memset(sum,0,sizeof(sum)); 
        memset(dp,0,sizeof(dp)); 
        for(i=0;i<n;i ) 
            for(j=0;j<n;j ) 
            cin>>arr[i][j]; 
        //很难想到,那以致是意气风发道动态规划题 
        //1、最大子字段和 
    /*
    标题能够转变为八个子难点:
    1,给定n个整数(大概为负数卡塔尔国组成的体系a[1],a[2],a[3],…,a[n],求该种类如a a … a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为马克斯{0,a a … a[j]},1<=i<=j<=n
    我们把b[j]明亮为早先方某项起始包罗a[j](a[j]为终极一个要素卡塔尔的连年的段的和最大值,易知,开端的a[i]自然为正数!
记b[j]=max(a .. a[j-1] a[j]),个中1<=i<=j,并且1<=j<=n,须求了解的一点是b[j]的值必需带有a[j]。则所求的最大子段和为max{b[j]},1<=j<=n。
    由b[j]的定义可易知,当b[j-1]>0时(即近年来的段加上a[j]那生机勃勃段值会越来越大,自然把a[j]那黄金年代段接上)b[j]=b[j-1] a[j],不然(由于前面包车型大巴段为负值,加上a[j],会使值变小,那样的话,我们将前方的段去掉,a[j]便是最大值卡塔 尔(英语:State of Qatar)b[j]=a[j]。故b[j]的动态规划递归式为 b[j]=max(b[j-1] a[j],a[j]),1<=j<=n。
    2、最大子矩阵和
 
    矩阵是二维的,将其压缩成大器晚成维就能够用地方的艺术求出最大子矩阵和了
    将要风流倜傥百年不遇的数相加,压缩成豆蔻梢头维的就可以,我们遍历全数的减少恐怕,就可以因而地点的主意,求出最大值!
    */  
        for(i=0;i<n;i ) 
        { 
            memset(sum,0,sizeof(sum)); 
            for(k=i;k<n;k ) 
            { 
                for(j=0;j<n;j ) 
                sum[j]=arr[k][j] sum[j]; 
                    dp[0]=sum[0]; 
                    for(p=1;p<n;p ) 
                    { 
                        if (dp[p-1]>0) dp[p]=dp[p-1] sum[p]; 
                        else dp[p]=sum[p]; 
                        if (dp[p]>max) max=dp[p]; 
                        /*
                        if(dp[p-1] sum[p]>sum[p])
                            dp[p]=dp[p-1] sum[p];
                        else
                            dp[p]=dp[p-1];
                        if(dp[p]>max) max=dp[p];
                        */ 
                    } 
                     
            } 
        } 
        cout<<max<<endl; 
        //system("pause"); 
    } 
    return 0; 

再有正是一些数值和字符的竞相转换用到了包strconv

Sample Input
4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1
8 0 -2  

package main

import "fmt"
import "strconv"
import "bytes"


func main() {
  var row,column int
  fmt.Scanln(&row,&column)
  var array = make([][]int,row,row)
  for i:=0;i<row;i  {
      carray := make([]int, column, column)
      for j:=0;j<column;j  {
      var columnValue string
      fmt.Scan(&columnValue)
      //fmt.Println(columnValue)
      intv,_:= strconv.Atoi(columnValue)
      carray[j] = intv
      }
      array[i] =carray
  }
  //fmt.Println(array)
  var buffer bytes.Buffer 
  for i:=0;i<column;i  {
      buffer.Reset()
      for j:=0;j<row;j  {
      buffer.WriteString(strconv.Itoa(array[j][i]) " ")
      }
      fmt.Println(buffer.String())
  }
}

As an example, the maximal sub-rectangle of the array:

图片 1

Problem Description
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle.

Consider following 2D array, which is of the size 3×53×5. For an array of size N×MN×M, the rows and columns are numbered from 00 to N−1N−1 and columns are numbered from 00 to M−1M−1, respectively. Any element of the array can be accessed by arr[i][j]arr[i][j] where 0≤i<N0≤i<N and 0≤j<M0≤j<M. For example, in the following array, the value stored at arr[1][3]arr[1][3] is 1414.

Output
Output the sum of the maximal sub-rectangle.  

A multi-dimensional array is an array of arrays. 2-dimensional arrays are the most commonly used. They are used to store data in a tabular manner.

To The Max

下来就是字符串拼接和别的的语言不太相通,先定义三个var buffer bytes.Buffer, 然后写数据buffer.WriteString("ddd"卡塔 尔(阿拉伯语:قطر‎,最终就是出口 buffer.String()

9 2
-4 1
-1 8

现实的主题材料如下:(就是将多维数组的队列交换卡塔 尔(英语:State of Qatar)

Input
The input consists of an N x N array of integers. The input begins with a single positive integer N on a line by itself, indicating the size of the square two-dimensional array. This is followed by N 2 integers separated by whitespace (spaces and newlines). These are the N 2 integers of the array, presented in row-major order. That is, all numbers in the first row, left to right, then all numbers in the second row, left to right, etc. N may be as large as 100. The numbers in the array will be in the range [-127,127].  

is in the lower left corner:

and has a sum of 15.  

本文由时时app平台注册网站发布于编程知识,转载请注明出处:golang 多维数组

关键词: