一.实验题目
输入一个含N个整数(有正数也有负数)的数组,求数组中最大子数组的和。
二.实验思路
程序分成两个部分:
(1):找到数组中所有可能的子数组的和;
采用遍历的方法,假如数组father[]中有5个数a,b,c,d,e,
第一步,求a,a+b,a+b+c,a+b+c+d,a+b+c+d+e;
第二步,求b,b+c,b+c+d,b+c+d+e;
第三步,求c,c+d,c+d+e;
第四步,求d,d+e;
第五步,求e。
通过两层循环来实现。
然后将这些和依次存入另一个数组son[]中。
(2):比较数组son[]中的值,然后输出最大的。
三.实验代码
1 // ketang4.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include "iostream" 6 using namespace std; 7 8 9 /*确定求和存储数组元素*/ 10 void Son(int father[],int son[],int length) 11 { 12 int add; //定义求和变量 13 int count=0; //统计数组元素个数 14 for(int i=0;i<length;i++) 15 { 16 add=0; 17 for(int j=0;j<length-i;j++) 18 { 19 add=add+father[i+j]; 20 son[count+j]=add; 21 } 22 count=count+length-i; 23 } 24 } 25 26 /*找到最大的子数组的和*/ 27 void Max(int son[],int num) 28 { 29 int max=son[0]; 30 for(int i=0;i<num;i++) 31 { 32 if(max<son[i]) 33 { 34 max=son[i]; 35 } 36 } 37 cout<<max<<endl; 38 } 39 40 /*主函数*/ 41 int main() 42 { 43 int length,num; //定义原始数组长度length,求和存储数组长度num 44 cout<<"请输入数组元素个数:"; 45 cin>>length; 46 int* father=new int[length]; //定义原始数组 47 num=length*(length+1)/2; 48 int* son=new int[num]; //定义求和存储数组 49 cout<<"请输入原始数组数据:"<<endl; 50 for(int i=0;i<length;i++) 51 { 52 cin>>father[i]; 53 } 54 Son(father,son,length); 55 cout<<"最大子数组的和为:"; 56 Max(son,num); 57 return 0; 58 }
四.运行结果
五.心得体会
首先我很开心能和世通一起写程序!
我觉得结对开发是一种很好的学习编程的方法,两个人一起做,就不会因为一个人因为暂时没有想法就一推再推,而是都会积极的提供自己的意见。世通的思路很好,按他的方法写出的代码不仅可以实现求特定长度数组的最大字数组的和,还可以自定义数组的长度。虽然程序很短,但体会到编程的过程是很开心的。
六.合影
时间: 2024-10-07 05:29:41