同组成员(尤凯丽):http://www.cnblogs.com/love528/
设计思想
在有负数的情况下,要保证找出的子数组的和是最大的,那么最小的负数是一定不会在子数组中的,我们将最小的负数作为一个断点,放在非循环数组的第一位,这样它之前的数就不需要先考虑了。例如:当循环数组为1,2,-5,6,-1时,最小的负数是-5,我们就可以将它断成非循环数组-5,6,-1,1,2。这样就可以算出最大和的子数组了。如果没有负数的话,从哪里断开就是无所谓的了,但是为了编程方便,我们还是从最小的数处断开。
源代码
import java.util.Scanner; public class Maxsum_2 { public static void main(String[] args) { // TODO Auto-generated method stub int max,a; System.out.println("请输入数字的长度:"); Scanner sc1 = new Scanner(System.in); int size = sc1.nextInt(); int num[]=new int [size]; int num2[]=new int [size]; System.out.println("请输入数字:"); for(int i=0;i<size;i++) { num2[i]=sc1.nextInt(); } int min=0,minnumber=num2[0]; for(int i=0;i<size;i++) { if(num2[i]<minnumber) { min=i; minnumber=num2[i]; } } for(int i=0;i<size;i++) { num[i]=num2[(i+min)%size]; } max=num[0]; a=num[0]; for(int i=1;i<size;i++) { if(max+num[i]>=num[i]) { if(num[i]<0&&a<max+num[i]) a=max; max=max+num[i]; } else max=num[i]; } if(a>max) max=a; System.out.print(max); } }
运行结果截图
总结:
这次的想法比较偏,不是很好理解,但是这样的话程序复杂度会降低,所以仍是使用了这种方法。
合作中的过程
在讨论过此次程序的具体要求后,同组同学(张雪晴)做了程序分析,并完成代码编程,据说历时16分钟。我仔细读程序后,根据不同的数组值的情况分别测试,结果正确。
体会
两个人的合作可以扬长避短,更快的完成任务。当然,要随时提高自身能力,才能慢慢成长。(最有效率的团队成员可能是水平相当的两个人)
如何解决冲突
当对同一个问题产生不同看法时,不要认为自己的就是最好的,尽量理解对方的想法。互相体谅,互相宽容,该让步的时候要让步。
合作照片: