标签:print ring class [] exti import sys col ted
课上老师把连续子数组求和的题目改为让子数组首尾相接再求最大子数组的和。
我的处理方法:新建一个二倍原数组长度b的数组d[ ],然后从d[0]到d[b]分别生成b个分数组,再分别求子数组和,再比较。
package wodeshiyao; import java.util.Scanner; public class shiyan321 { static Scanner scan=new Scanner(System.in); public static void main(String[] args) { // TODO Auto-generated method stub int b; //数组长度 System.out.println("请输入数组长度:"); b=scan.nextInt(); int c[]=new int [b];//定义规定长度的整型数组 System.out.println("请输入数组元素:"); for(int i=0;i<b;i++) { c[i]=scan.nextInt(); //a[]是原数组 } int d[]=new int [2*b-1]; //d[]是双倍数组 for(int p=0;p<b;p++){ d[p+b]=d[p]; } int l,n; int e[]=new int [b]; //e[]是最大值数组和 int f[]=new int [b]; //存放当前分数组的值 for(l=0;l<b;l++)//第l号数组 { for(n=0;n<b;n++) //确定分数组 {f[n]=d[l+n];} int i,j,k; int max[]=new int [b]; for(i=0;i<b;i++){ max[i]=f[i]; k=f[i]; for(j=i+1;j<b;j++){ k=k+f[j]; if(k>max[i]) {max[i]=k;} } } //选最大数组和 int m=max[0]; for(i=1;i<b;i++) { if(max[i]>m) {m=max[i];} } e[l]=m; } int m=e[0]; int i; for(i=1;i<b;i++) { if(e[i]>m) {m=e[i];} } System.out.println("所有连续子数组和的最大值为:"+m); } }
但是我的代码还存在错误,改正后再发。
标签:print ring class [] exti import sys col ted
原文地址:https://www.cnblogs.com/jmdd/p/10591284.html