设计思路:
1.先解决随机输入数字个数的问题:用while解决(while(cin>>num))若输入的不是数字则结束;
2.先定义Max1=0和Max2=0,Max1+=num,和Max2比较,若Max1>Max2,Max2=Max1如果Max1<0就令Max1=0;这样就解决了输入数字中有负数的问题;
源代码:
/*输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n) 李国帅 2016.4.08 */ #include <iostream> using namespace std; int main() { int num,max1=0,max2=0; cout<<"请输入数据,如果要结束,请输入非数字:"<<endl; while(cin>>num)//当输入的数据是数字时执行下列语句 { max1+=num; //判断最大值 if(max1>max2) { max2=max1; } if(max1<0) { max1=0; } } cout<<"所有子数组的和的最大值是:"<<max2; }
出现的问题:怎样解决用户自己都不知道数组数字个数可以随机输入数组数字的个数问题?
解决的方法:用while语句,可以解决上述问题。
结果截图:
总结:
while语句可以解决事先并不知道数组元素个数的问题;
数据结构要时常温习,编程中有很多地方都用得到,比如这次用的排序方法。