您的位置:首页 > 编程语言

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

2016-04-16 18:26 337 查看
合作照片:





设计思想:

在原程序的基础上,再加一个循环,循环从最后一位数开始,到它之前的数结束;

可以将最后一位数赋给第一个数,剩下的数依次向前进一位;

计算方法和上次相同,每次循环都加上相邻的数,比较是否小于0,若小于0则将和的值赋为0,从下一位重新开始相加;若大于最初的最大值,则将和的值赋给最大值;

上次程序实现了首尾不连接的最大值,这次循环实现首尾连接的最大值,后再比较两次最大值,返回其中最大的值。

合作过程:

首先,两人在一起对编程题目进行讨论,发表自己的见解,并且对上次的编程进行回顾总结,对上次的思路进行整理,将这次程序进行完善。

源程序代码:

//求数组中子数组和的最大值
import java.util.Scanner;
public class Test3{
public static void main(String[] args){
int N=3;
int list[]=new int
;
//创建一个新数组
Scanner in=new Scanner(System.in);
int i;
System.out.println("请输入数组:");
for(i=0;i<N;i++)
{
list[i]=in.nextInt();
}
max_ l=new max_();
System.out.print("子数组最大的和为:  "+l.max_(list,N));
//调用函数
in.close();
}
}
class max_
{
int max_(int list[],int length)
{
int i;
int max;
int lmax1=0;
int lmax2=0;
int max1=list[0];
//设最大值为list[0]
for(i=0;i<length;i++)
{
lmax1+=list[i];
if(lmax1>max1||lmax1==max1)
{
max1=lmax1;
}
if(lmax1<0)//若小于0,则从后一个数开始加和
{
lmax1=0;
if(max1<list[i]||max1==list[i])
{
max1=list[i];
}
}
//若数组全为负数,求最大值
}
//实现首尾相接,求最大值
int sum;
sum=list[length-1];
for(i=0;i<length-1;i++)
{
list[i+1]=list[i];
}
list[0]=sum;
int max2=list[0];
for(i=0;i<length;i++)
{
lmax2+=list[i];
if(lmax1>max2||lmax1==max2)
{
max2=lmax2;
}
if(lmax2<0)//若小于0,则从后一个数开始加和
{
lmax2=0;
if(max2<list[i]||max2==list[i])
{
max2=list[i];
}
}
//若数组全为负数,求最大值
}
if(max1>max2)
{
max=max1;
}
else
max=max2;
return max;
}
}


结果截图:









总结体会:

两次程序的设计思想是基本相同的,我们只需要在原程序的基础上加一个循环求得首尾连接的最大值,再比较出最大值即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: