#include <iostream> #include <ctime> #define N 10 using namespace std; int maxxunhuan(int array[N] , int n){ int i,j = 0,m,c = 0; int sum = array[0],b = 0,max = 0; for(j = 0;j < n;j++){ b = 0; for(i = j;i < n;i++){ if(i < n-1){ if(b > 0){ b += array[i]; m = i; } else b = array[i]; if(b > sum) sum = b; } if(i == n-1){ b = b + array[i]; for(c = 0;c < j;c++){ if(b > 0) b += array[c]; else b = array[c]; if(b > sum) sum = b; } } } if(sum >max) max = sum; } return sum; } int main(){ int array[N]; int i; memset(array,0,sizeof(array)); //初始化一维数组 cout<<"随机生成的一维数组为的:"<<endl; srand((unsigned)time(0)); for(i = 0;i < N;i++){ array[i] = rand()%25-10; cout<<array[i]<<‘\t‘; } cout<<"最大循环子数组为:"<<endl; cout<<maxxunhuan(array , N); return 0; }
1
编程思想:
用srand随机生成一维数组。
如:1 , 14 , -9 , -1 , 6 , 6, -2, 3, -9, 4
第一次循环是从1 , 14 , -9 , -1 , 6 , 6, -2, 3, -9, 4
第二次循环是从14 , -9 , -1 , 6 , 6, -2, 3, -9, 4, 1
第三次循环是从-9 , -1 , 6 , 6, -2, 3, -9, 4, 1, 14
。。。。
第n次循环是从。。。
用变量j来控制循环的次数,有n个数就有n个循环。
在每次循环中,参考返回一维数组最大子数组的方法,求出每一次循环中的最大子数组sum,然后用max来表示总循环中最大的那个子数组
时间复杂度o(n2).
时间: 2024-10-15 19:29:29