组员:刘伟 李晨(http://www.cnblogs.com/jiajun1/)
一 题目及要求:
题目:返回一个整数数组中最大子数组的和
要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大;
②同时返回最大子数组的位置。
二 设计思想:
这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,在输入数组的时候把数组扩充一倍,然后求以每个数作为开始的,长度为n的,最大子数组的值,就可以得到结果
1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #define N 100000 5 using namespace std; 6 int main() 7 { 8 int a[N]; 9 int start,end,i, sum,max,m,n; 10 cout<<"请输入个数:"; 11 cin>>n; 12 m=n; 13 cout<<"请输入数组:"; 14 for( i=0;i<n;i++) 15 { 16 cin>>a[i]; 17 a[i+n]=a[i]; 18 } 19 max=a[0]; 20 start=0; 21 end=0; 22 for(int j=0;j<n;j++) 23 { 24 sum=0; 25 for(int k=j;k<n+j;k++) 26 { 27 sum=sum+a[k]; 28 if(sum>max) 29 { 30 max=sum; 31 start=j+1; 32 end=k+1; 33 } 34 } 35 } 36 cout<<"最大子数组的值为:"<<" "<<max<<endl; 37 cout<<"开始于第"<<start<<"个数"<<" "<<"结束在第"<<end%n<<"个数"<<endl; 38 cout<<"这个子数组为:"; 39 for(int c=0;c<end-start+1;c++) 40 { 41 cout<<a[start+c-1]<<" "; 42 } 43 }
项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 25 | 25 | 15 | 165 |
周二 | 30 | 35 | 25 | 90 | |
周三 | 60 | 15 | 35 | 110 | |
周四 | 100 | 30 | 30 | 25 | 185 |
周五 | 180 | 15 | 195 | ||
周六 | 60 | 15 | 75 | ||
周日 | 15 | 15 | |||
周总计 | 200 | 325 | 180 | 130 | 835 |
时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
17:10 | 17:20 | 10 | 阅读书籍 | 《构建之法》《人月神话》 | ||
21:00 | 21:25 | 20 | 网上查找资料 | |||
3/22 | 14:00 | 15:00 | 10 | 110 | 结对编程 | 编写老师布置的作业 |
16:00 | 17:00 | 10 | 110 | 看书 | 《人月神话》 | |
3/23 | 21:00 | 21:30 | 30 | 结对编程 | 编写老师布置的作业 | |
3/24 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
3/25 | 16:00 | 18:00 | 120 | 结对编程 | 编写老师布置的作业 | |
3/26 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》 | |
3/27 | 9:00 | 9:30 | 30 | 看书 | 《人月神话》 |
缺陷记录日志:
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月26日 | 1 | 编码 | 编码 | 10min |
在环变链的时候出现了错误,最后用循环和拓展数组解决 |
好文要顶 关注我 收藏该文
时间: 2024-10-12 17:31:20