日常记录,本人菜鸟一枚
该方法中,使用递归方法,得到解空间,然后筛选出最大值
#include<iostream>
using namespace::std;
int max(int arr[],int length);
int* pop(int arr[]);
int print(int arr[],int length);
int length;
int i=0;
void maxstring(int arr[],int arr1[],int m,int sum,int everyMax[]);
int main(){
int arr[]={-2,11,-4,13,-5,-2} ;
length = sizeof(arr)/4;
int arr1[length]={};
int length1=length;
int sum;
int m=0;
int everyMax[255];
// pop(arr);//弹数组准备完毕
maxstring(arr,arr1,m,sum,everyMax);
cout<<length<<endl;
print(everyMax,length1);
cout<<endl;
cout<<"最大字段和为"<<max(everyMax,length1);
//
// for(int i =0;i<length;i++){
//}
return 0;
}
void maxstring(int arr[],int arr1[],int m ,int sum,int everyMax[]){
if(length <=0){
return;
}
for(int j = 0;j<length;j++){
sum +=arr[j];
arr1[m]=sum;//存第一项分别一直往后加的和
cout<<arr1[m]<<",";
m++;
}
sum=0;
pop(arr);
everyMax[i] = max(arr1,length);//存遍历和的最大值
cout<<"第"<<i+1<<"轮最大值"<<everyMax[i]<<endl;
i++;
m=0;
maxstring(arr,arr1,m,sum,everyMax);
}
int max(int arr[],int length){
int max=arr[0];
for(int m = 0;m<length;m++){
if(max<arr[m]){
max=arr[m] ;
}
}
return max;
}
int* pop(int arr[]){
for(int i =0;i<length;i++){
arr[i]=arr[i+1];
}
length--;
return arr;
}
int print(int arr[],int length){
for(int i=0;i<length-1;i++){
cout<<arr[i]<<",";
}
cout<<arr[length-1];
}