码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-08 19:54:13      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

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                 else
108                 {
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.编程总结

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

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

标签:

原文地址:http://www.cnblogs.com/jinghun/p/5369605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!