题目要求:

1、输入一个一维整形数组,数组里有正数也有负数。
2、一维数组首尾相接,象个一条首尾相接带子一样。
3、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
4、求所有子数组的和的最大值。 

设计思路:

1建立一个2维数组a(初定为1002列),第一列用于存放输入数字,第二列用于表示本字符以前的最大子数组和的值。

2、输入任意多个数,每输入一个数number++numberint型用于表示数组长度),当输入1024时停止输入,把输入的数存放在数组的第一列中。

3、进入循环,新建数组new,把输入的数存入数组,把第i个存为第一个数。

    3.0,new[0][1]=new[0][0]

    3.1从第二个数开始进入循环,如果new[i-1][1]小于0new[i][1]=new[i][0];如果new[i-1]     [1]大于0new[i][1]=new[i][0]+new[i-1][1]

    3.2比较第二列中的数,选出最大数即是子数组中和最大的

    3.3将最大的数放到a[i][1]

4、比较a[i][1]中数字,选出最大的数字即为答案

代码如下:

 

package 数组问题;

import java.util.Scanner;

public class Shuzu {
    public static void main(String args[])
    {
        int[][] array=new int[100][2];
        int number = 0;//记录有几个数字
        Scanner sca=new Scanner(System.in);
        System.out.println("请输入100以内个整数");
        for(int i=0;i<100;i++)
        {
            array[i][0]=sca.nextInt();
            if(array[i][0]==1024) //以1024结束
            {
                number=i;
                break;
            }
        }
        for(int i=0;i<number;i++)
        {
            int[][] array_=new int[100][2];
            //为临时数组赋值
            for(int j=0;j<number;j++)
            {
                array_[j][0]=array[(j+i)%number][0];
                
            }
            //对临时数组进行字符串最大值计算
            array_[0][1]=array_[0][0];
            for(int s=1;s<number;s++)
            {
                if(array_[s-1][1]<0)
                {
                    array_[s][1]=array_[s][0];
                }
                if(array_[s-1][1]>=0)
                {
                    array_[s][1]=array_[s-1][1]+array_[s][0];
                }
            }
            int max=array_[0][1];
            for(int j=1;j<number;j++)
            {
                if(array_[j][1]>=max) 
                {
                    max=array_[j][1];
                }
            }
            //最大值赋值给array数组
            array[i][1]=max;
        }
       
        int max=array[0][1];
        for(int i=1;i<number;i++)
        {
            if(array[i][1]>=max) 
            {
                max=array[i][1];
            }
        }
        
        System.out.println("最大和为"+max);
        
    }

}

 

结果截图:

结对开发图:

合作体会:一个人的思路是有局限性的,比如这道题,在我对如何进行环状连接,以及在Java中使用链表一筹莫展时,我的队友提出了用取余法做一个假链表的方法解决了这一问题。