组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html
1.要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。
2分析:
这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,在输入数组的时候把数组扩充一倍,然后求以每个数作为开始的,长度为n的,最大子数组的值,就可以得到结果
3代码:
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 }
4截图:
5项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 70 | 15 | 195 | |
周二 | 40 | 45 | 95 | ||
周三 | 50 | 45 | 35 | 120 | |
周四 | 100 | 40 | 40 | 180 | |
周五 | 90 | 15 | 105 | ||
周六 | 40 | 15 | 65 | ||
周日 | 45 | 45 | |||
周总 |
6时间记录日志:
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
21:00 | 21:25 | 20 | 阅读书籍 | 《构建之法》 | ||
3/22 | 14:00 | 17:00 | 10 | 110 | 编程 | 编写作业 |
18:00 | 22:00 | 10 | 110 | 看书 | 《构建之法》 | |
3/23 | 21:00 | 21:30 | 30 | 编程 | 编写老师布置的作业 | |
3/23 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
3/24 | 16:00 | 18:00 | 120 | 编程 | 编写作业 | |
3/25 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》 《人月神话》 | |
3/26 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》 |
7缺陷记录日志:
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月26日 | 1 | 编码 | 编码 | 10min |
在环变链的时候出现了错误,最后用循环和拓展数组解决 |
时间: 2024-10-13 17:59:28