星空网 > 软件开发 > Java

课堂练习(返回一个整数数组中最大子数组的和)

1.设计思想

  只用一个主函数即可完成。

  首先,定义一个整型数组,让用户输入一组整数。

  然后,判断这一组数的正负还有零的情况。

  最后,根据判断出来的情况进行选择执行 if 语句,情况分别为全为0,负数和0,正数和0还有正数负数和0。

2.源代码

课堂练习(返回一个整数数组中最大子数组的和)课堂练习(返回一个整数数组中最大子数组的和)
 1 /* 2  * For the maximum of the subarray of an integer array 3  * The start time 2016/4/8 16:50 4  * The end of time 2016/4/8 18:30 5  * Author Jing 6 */ 7 package arraymax; 8 import java.util.*; 9 public class SumArray { 10  11   public static void main(String[] args) { 12      13     Scanner sca=new Scanner(System.in); 14     System.out.println("输入整数数组数的个数"); 15     int num=sca.nextInt(); 16      17     int a[]=new int[num],b[]=new int[num]; 18     int i; 19     System.out.println("输入此组整数数组"); 20     for(i=0;i<num;i++) 21     { 22       a[i]=sca.nextInt(); 23     } 24     int l=0,j=0,k=0,sum=0,max; 25     for(i=0;i<num;i++)//判断输入数组的正负情况 26     { 27       if(a[i]>=0) 28       { 29         j++; 30       } 31       if(a[i]<0) 32       { 33         k++; 34       } 35       if(a[i]==0) 36       { 37         l++; 38       } 39     } 40     if(k==num)//全为负数 41     { 42       max=a[0]; 43       for(i=1;i<num;i++) 44       { 45         if(max<a[i]) 46         { 47           max=a[i]; 48         } 49       } 50       System.out.println("最大子数组和为 "+max); 51     } 52     else if((l+k)==num)//只有负数和0 53     { 54       System.out.println("最大子数组和为 0"); 55     } 56     else if(j==num)//全为非负数 57     { 58       for(i=0;i<num;i++) 59       { 60         sum+=a[i]; 61       } 62       System.out.println("最大子数组和为 "+sum); 63     } 64     else 65     { 66       for(i=0;i<num-1;i++) 67       { 68         if(a[i]>=0&&a[i+1]>=0) 69         { 70           a[i+1]=a[i]+a[i+1]; 71           a[i]=0; 72         } 73         if(a[i]<0&&a[i+1]<0) 74         { 75           a[i+1]=a[i]+a[i+1]; 76           a[i]=0; 77         } 78       } 79       k=0; 80       j=0; 81       while(k<num)//循环完成后b[]中只有正负数 82       { 83         if(a[k]!=0) 84         { 85           b[j]=a[k]; 86           j++; 87         } 88         k++; 89       } 90       if(b[0]<0) //寻找第一个正数的下标 91       { 92         i=1; 93       } 94       else 95       { 96         i=0; 97       } 98       while(i<j-2)//只有正数和负数时进行计算 99       {100         if(b[i]>(-b[i+1]) && (-b[i+1])<b[i+2])101         {102           b[i+2]=b[i]+b[i+1]+b[i+2];103           b[i]=0;104           b[i+1]=0;105           i=i+2;106         }107         else108         {109           i=i+2;110         }111       }112       max=b[0];113       for(i=1;i<j;i++)114       {115         if(max<b[i])116         {117           max=b[i];118         }119       }120       System.out.println("最大子数组和为 "+max);121     }122   }123 }

The Main Code

3.结果截图

课堂练习(返回一个整数数组中最大子数组的和)课堂练习(返回一个整数数组中最大子数组的和)课堂练习(返回一个整数数组中最大子数组的和)课堂练习(返回一个整数数组中最大子数组的和)课堂练习(返回一个整数数组中最大子数组的和)

4.编程总结

  由于时间问题,此程序编的有些仓促,还有很多不足之处,以及需要优化的地方。在空余时间里,我再继续思考,争取编出一个最起码自己满意的程序。




原标题:课堂练习(返回一个整数数组中最大子数组的和)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

西法共享仓:https://www.goluckyvip.com/tag/43743.html
西法市场:https://www.goluckyvip.com/tag/43744.html
西瓜出海:https://www.goluckyvip.com/tag/43745.html
西瓜跨境:https://www.goluckyvip.com/tag/43746.html
西红柿:https://www.goluckyvip.com/tag/43747.html
西集网:https://www.goluckyvip.com/tag/43748.html
川藏线自驾游要怎么走才比较划算呢?:https://www.vstour.cn/a/411240.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流