二哥种花生(正解)

本文介绍了一个通过编程解决的问题:如何计算给定花生地尺寸和单位面积产量的情况下,某特定大小区域内的最大总产量。该问题涉及输入处理、二维数组操作及遍历计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Scanner;

 

//变量定义的实在有点乱、懒得换了、估计也只有我自己能看懂。= =


/*二哥种花生

Description

二哥在自己的后花园里种了一些花生,也快到了收获的时候了。这片花生地是一个长度为L、宽度为W的矩形,

每个单位面积上花生产量都是独立的。他想知道,对于某个指定的区域大小,在这么大的矩形区域内,花生的产量最大会是多少。

Input Format

第1行有2个整数,长度L和宽度W。

第2行至第L+1行,每行有W个整数,分别表示对应的单位面积上的花生产量A( 0≤A<10  )。

第L+2行有2个整数,分别是指定的区域大小的长度a和宽度b。

Output Format

输出一个整数m,表示在指定大小的区域内,花生最大产量为m。

Sample Input

4 5

1 2 3 4 5

6 7 8 0 0

0 9 2 2 3

3 0 0 0 1

3 3

Sample Output

38

 样例解释

左上角:38 = (1+2+3) + (6+7+8) + (0+9+2)

数据范围

对于30%的数据: 1≤L,W≤100 ;

对于100%的数据: 1≤L,W≤1000 。

全部区域大小满足:1≤a≤L,1≤b≤W  。

*/

class Test2{

   static int l, w, number, l1, w1, sum = 0;

   static Scanner scanner;

   public static void main(String args[]){

      System.out.println("请输入长度L和宽度W(用空格隔开):");

      scanner = new Scanner(System.in);

      l = scanner.nextInt();

      w = scanner.nextInt();

     

      //判断输入是否满足要求,不满足直接退出

      if( (l<0)||(l>1000)||(w<0)||(w>1000) )

         System.exit(0);

     

      System.out.println("输入的长度为:" + l + " 输入的宽度为:" + w);

     

      int array[][] = new int[l][w];

      for(int n = 0; n < l; n++){

         for(int m = 0; m < w; m++){

            if(m != (w-1)){                 //question is here!!

                number = (int)( 10*Math.random() );

                array[n][m] = number;

                System.out.print(number + " ");

               

            }else{

             

                number = (int)( 10*Math.random() );

                array[n][m] = number;

                System.out.println(number);

            }

         }

 

      }//实现输出矩形区域内,花生的产量是多少

     

      System.out.println("请输入长度、宽度。显示矩形区域内花生的产量会是多少??");

      l1 = scanner.nextInt();

      w1 = scanner.nextInt();

     

      //判断是否超出矩形大小

      if( (l1>l)||(l1<0)||(w1>w)||(w1<0))

         System.exit(0);

     

      System.out.println("选择土地的长度为:" + l1 + " 宽度为:" + w1);

     

     

      //实现圈地

      int l1_save = l1, w1_save = w1;

      int loop_l, loop_w;

      loop_l = l-l1+1;

      loop_w = w-w1+1;

  

      int sumnumber = 0;

      int all_sum[] = new int[ (loop_l+1)*(loop_w+1) ];    //整块土地中有多少块小矩形

     

      for(int num1 = 0; num1 < loop_l; num1++,l1_save++){   

         for(int num2 = 0; num2 < loop_w; num2++,w1_save++){

            for(int n = num1; n < l1_save; n++)

               for(int m = num2; m < w1_save; m++){

                  sum = sum + array[n][m];

               }

            all_sum[sumnumber] = sum;    //每个圈地中的产量放入一维数组中

            System.out.println( "第"+ (sumnumber+1) + "块矩形的产量为是" + all_sum[sumnumber] + " " );

            sum = 0;

            

            sumnumber++;

         }

         

         w1_save = w1;

      }

               

      //一维数组中找出最大的产量组

      int size;

      size = all_sum.length;   

      int max = 0;

      for(int i = 0; i < size; i++){

         if( all_sum[i] > max )

            max = all_sum[i];

         

      } 

     

      System.out.println("我总算算出了啃爹的最大产量矩形土地为:" + max);

     

 

   }

 

}

 

/*

结果:


圈地想法:


*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值