标签:int inf sig length width 整数 ctime 生成 技术分享
设计思想
遍历数组的时候将数组中第一个数变成最后一个数,这样就得到了好几个新的数组,然后输出每个数组的最大子数组的和,在比较每个输出结果,找到最大的子数组和。
代码
#include <iostream> #include<ctime> #define Num 10000 using namespace std; int DTGH_Sum(int a[],int n) { int sum = 0; int *b = (int *) malloc(n * sizeof(int)); b[0] = a[0]; for(int i = 1; i < n; i++) { if(b[i-1] > 0) b[i] = b[i - 1] + a[i]; else b[i] = a[i]; } for(int j = 0; j < n; j++) { if(b[j] > sum) sum = b[j]; } delete []b; return sum; } int main() { int temp,b; int sum=0; int i; int a1,a2; int a[Num]; int length=0; while (length==NULL||length == 0) { cout<<"请输入数组长度:"; cin>>length; } cout<<"生成随机序列: "<<endl; srand((unsigned)time(NULL)); for(i=0;i<length;i++) { if(rand()%2==0) { a[i]=rand()%100; } else { a[i]=(-1)*rand()%100; } cout<<a[i]<<" "; } cout<<endl; cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl; cout<<"第1种排列方式:"<<endl; for( i=0;i<length;i++) { cout<<a[i]<<" "; } cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl; a1=DTGH_Sum(a,length); for(b=1;b<length;b++) { temp=a[0]; for(i=1;i<=length;i++) { a[i-1]=a[i]; } a[length-1]=temp; cout<<"第"<<b+1<<"种排列方式:"<<endl; for( i=0;i<length;i++) { cout<<a[i]<<" "; } cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl; if(DTGH_Sum(a,length)>=sum) { sum=DTGH_Sum(a,length); } } a2=sum; cout<<endl; if(a1>=a2) { cout<<"综上,最大的子数组和为:"<<a1<<endl; } else { cout<<"综上,最大的子数组和为:"<<a2<<endl; } return 0; }
运行效果
合照
标签:int inf sig length width 整数 ctime 生成 技术分享
原文地址:https://www.cnblogs.com/mashijie605023237/p/9904551.html