标签:总结 com turn str let 最大子数组 任务 通过 delete
#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 m = 1; m < n; m++) { if(b[m-1] > 0) b[m] = b[m - 1] + a[m]; else b[m] = a[m]; } 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 m; int a1,a2; int a[Num]; int length=0; while (length==NULL||length == 0)//如果数组长度为空或零则请重新输入 { cout<<"请输入数组长度:"; cin>>length; } cout<<"生成随机序列: "<<endl; srand((unsigned)time(NULL)); for(m=0;m<length;m++)//产生随机序列 { if(rand()%2==0) { a[m]=rand()%100; } else { a[m]=(-1)*rand()%100; } cout<<a[m]<<" "; } cout<<endl; cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl; cout<<"第1种排列方式:"<<endl; for( m=0;m<length;m++) { cout<<a[m]<<" "; } cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl; a1=DTGH_Sum(a,length); for(b=1;b<length;b++) { temp=a[0]; for(m=1;m<=length;m++) { a[m-1]=a[m]; //将第一个数变为最后一个数 } a[length-1]=temp; cout<<"第"<<b+1<<"种排列方式:"<<endl; for( m=0;m<length;m++) { cout<<a[m]<<" "; } 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; }
另一小组成员为陈岩,其中陈岩负责程序分析,代码编写。我(梁明宇)负责代码复审和代码测试计划。设计思想为老师上课提到的遍历数组里面的每一个数将第一个数变为最后一个数,这样又变成了一个新的一维数组,输出每个数组的最大子数组和,然后比较每个输出的和,找出最大的数。其中遇到的问题是申请动态空间未释放(通过询问有malloc函数方法还有我们所用到的方法)。总结:在这次编译代码的过程中,参照了老师上课讲的内容,并且辅助了一些网上资源,在不断的磕磕绊绊的编译修改过程中完成了这次的代码编写任务,在不断地磨合过程中进步。
标签:总结 com turn str let 最大子数组 任务 通过 delete
原文地址:https://www.cnblogs.com/yeziaaa/p/9904615.html