zoukankan      html  css  js  c++  java
  • 第四堂测试——二维数组

           想了这个问题有好几遍,看似简单,但是怎么也做不出来,真的是 反思自己 ,每一次此做算法题,都想小时候做的奥数,浑身出汗,脚底,手心冒汗 ,绞尽脑汁,但是不管怎么样,都是想不出来,让我不禁想起小时候脑袋摔到地上,被二姐用铁饼砸的事情, 我现在还隐隐作痛。

           那么这二维数组求和,我想出了三种方案,当然有两种是同学启发的

    一:

           既然二维数组,那么就是矩形,矩形的化,是不是可以这么想,例如

           (1)     1 2 3

           (2)     2 2 2

           (3)     0 0 0

    这一个二维数组,那么他的矩形可以是,每一个小块,同时也可是随机每一相邻的块的组合

    那么,单单(1)是三个 (2)+(1)是不是也是3个,然后他的列集中随机组合就可以了。

    这个想法试了很久,依旧没有实现。。。。

    二:

           在一个就是把二维数组,分成好几块。他的级别可以这样分

    第一层:可以分成几块,也就是有几个组合,比如这个块是一个那么宽,或者3个那么宽,所以他的取值也就是1-n;

    第二层:是几行,也就是分成很多行。

    第三层:针对单个行的运算和一维数组比较像。

    第四层:是进行累计相加。

    这个的关键,便是第四层能够实现,针对第一层的块,来实现这一列的块数相加,!!!!!,这个是个大瓶颈,今天晚上应该就能解决掉。

    三:

           例如:

           (1)(2)(3)

    1)2   3    2

    2)2   2    2

    3)0   -1   2

    这个数组,怎么可以确定一个矩形呢,那便是得知他的左上角,右下角,就可以知道这个举行了。

    a第一个for是每一行,从0到n-1

    n第二个for是针对第一个,在其上进行相加到n-1            那么这个的意思也就是说,从第一个到下一个的位置矩形的长也就顶了,我们就知道,这个的长了!!!!

    b第三个for是每一列 从 0到n-1;

    m第四个,是从第三个到第四个这之间的,确定矩形的宽。

    然后就要在这个已知区间里进行相加了。

    For(int i=a;i<n;i++)

    For(int j=b;j<m;j++)

    {

    X=x+str[i][j];

    }

     

     1 package 数组;
     2 import java.util.List;
     3 import java.util.Scanner;
     4 import java.util.*;
     5 import java.util.Scanner;
     6 import java.util.StringTokenizer;
     7 import java.io.BufferedReader;
     8 import java.io.FileOutputStream;
     9 import java.lang.Math;
    10 import java.io.IOException;
    11 public class ErJie {
    12     
    13     public static void main(String[] args)
    14     {
    15         //定义
    16     int[][] str=new int[100][100];//主体
    17     int[] str1=new int [100];//每一个的串值
    18     //规定长与宽
    19     System.out.println("请输入长,宽:");
    20     int a=0;//总数
    21     int b=0;
    22     Scanner scan=new Scanner(System.in);
    23     a=scan.nextInt();
    24     b=scan.nextInt();
    25     //输入值
    26     System.out.println("请输入值:");
    27     for(int i=0;i<a;i++) {
    28         for(int j=0;j<b;j++)
    29         {int s1;
    30         s1=scan.nextInt();
    31         str[i][j]=s1;}
    32     }int l=0;
    33     //输出
    34     for(int i=0;i<a;i++) {
    35         for(int j=0;j<b;j++)
    36         System.out.println("("+(i+1)+", "+(j+1)+")是:"+str[i][j]);
    37     }
    38     //代码实现
    39     int Q=0;int M=0;
    40     for(int i=0;i<a;i++) {//一共一行到a行
    41         Q=Q+1;//几块进行运算(2 4 。。)
    42         int O=0;
    43         for(int n=i;n<a;n++) {//每一行
    44             O=O+1;//每一行就是对一维的下移
    45             for(int j=0;j<b;j++) {//每一个
    46                 int P=0;//每一个小组合的第一个
    47                 for(int m=j;m<b;m++) {//从j加到最后
    48                     int a1=str[i][j];
    49                     
    50                     for(int x=i;x<=n;x++) {
    51                         for(int y=j;y<=m;y++) {
    52                             a1=str[x][y]+a1;
    53                         }
    54                     }
    55                     str1[M]=a1-str[i][j];
    56                     M=M+1;
    57                 }
    58             }
    59         }
    60     }
    61     int x=str1[0];
    62     for(int i=0;i<M;i++) {
    63         if(str1[i]>x)x=str1[i];
    64     }
    65     
    66     System.out.println(x);
    67     
    68
  • 相关阅读:
    tensorflow源码解析之framework-shape_inference
    tensorflow源码解析之framework-function
    tensorflow源码解析之framework-device
    时间之外的往事
    字段初始值无法引用非静态字段、方法或属性“ ”
    第六期新人助跑感悟
    java volatile
    spring aop
    jvm类加载机制
    redis 集群 sharding策略
  • 原文地址:https://www.cnblogs.com/smartisn/p/10584400.html
Copyright © 2011-2022 走看看