码迷,mamicode.com
首页 > 编程语言 > 详细

最大子数组2

时间:2016-03-27 19:32:23      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

题目要求:
1.输入一个整形数组,数组里有正数也有负数。
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
4.同时返回最大子数组的位置。
5.求所有子数组的和的最大值。
解决方法:
     在上一次的基础上,增加了环状数组,并且要求返回数组的下标值。实现方法:分别计算以每一个数开头的环状数组的最大子数组的值,然后计算这些这些值中的最大值,将产生最大值的数组的下标值记录下来,然后将下标值输出。
 
结组照:
技术分享
代码如下:
 1 #include<iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     int a[100] = { 0 };
 7     int b[10][100] = { 0 };
 8     int length, i, j, all = 0;
 9     int begin = 0, end = 0;        //数组的起始和终止下标
10     int max, temp;
11     cout << "输入随机整数:" << endl;
12     
13     for (length = 0;;)
14     {
15         cin >> a[length];
16         length++;
17         if (getchar() == \n)    //回车结束
18         {
19             break;
20         }
21     }
22                                   //求子数组
23     for (i = 0; i<length; i++)
24     {
25         temp = i;
26         all = 0;
27         j = 0;
28         while (j <= length - 1)
29         {
30             all += a[temp];
31             b[i][j] = all;
32             temp++;
33             if (temp>length - 1)
34             {
35                 temp = 0;
36             }
37             j++;
38         }
39     }
40     max = b[0][0];
41     for (i = 0; i<length; i++)//将每个数对应的最大子数组进行判断,最后得到整个整数组的最大子数组
42     {
43         for (j = 0; j<length; j++)
44         {
45             if (b[i][j]>max)
46             {
47                 max = b[i][j];
48                 begin = i;
49                 end = j;
50             }
51         }
52     }
53     cout << "最大子数组的值为:" << max << endl;
54     cout << "最大子数组中元素的下标位置:" << endl;
55     i = 0;
56     while (i <= end)          //输出下标值
57     {
58         cout << begin << "  ";
59         begin++;
60         if (begin >= length)
61         {
62             begin = 0;
63         }
64         i++;
65     }
66     cout << endl;
67 }

运行结果截图如下:

技术分享

经检验,数组中最大子数组应为【3】【4】【5】【6】【0】求和结果为:11

结果正确!

技术分享

经检验,数组中最大子数组应为【0】【1】【2】【3】【4】求和结果为:11

结果正确!

 

本次结对开发的项目开发总结如下:

<

项目计划 总 结:             
日期\任务 听课 编写程序 查阅资料 日总计  
星期四 2 0.5 0 2.5  
星期六    2 2.5
 4.5  
星期日   1
1.5  2.5  
周总计 2 3.5 4 9.5  

<

时间记录日志:               
日期 开始时间 结束时间 中断时间 静时间 活动 备注
3月24日 14:00 15:50 10min 100min 听课+编程 软件工程
 3月26日 8:20 11:50  60min 2.5h 编写程序+查阅资料 查阅相关解题思路/编写程序
  15:00 17:30 30min 2h 编程+查资料 调试程序寻找错误地方
3月27日 8:00 11:00  30min 2.5h 总结与优化代码 反思与优化

<

缺陷记录日志:          
日期 编号 引入阶段 排除阶段 修复时间&问题描述
3月24日 1 编码 编译 10min,数组问题
3月26日 2 编码 编译

50min;程序实现思路有问题

3月27日 3 编码 编译

50min;

代码实现过于繁琐-->优化代码

 

最大子数组2

标签:

原文地址:http://www.cnblogs.com/X-knight/p/5326349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!