输入n个整数(可以为任意的正数,负数,0)构成一个数列,从该数列中连续取出K个数进行求和。编程求解该连续取数方式下能得到的最大和值,以及该和值下能找到的最大K值。
输入格式:
先输入数列的长度n,再依次输入数列中n个整数
输出格式:
输出最大的和值与对应的最大的k值
输入样例1:
7
0 6 -1 1 -6 7 -5
输出样例1:
在这里给出相应的输出。例如:
MAX Sum= 7, MAX K= 6
输入样例2:
9
12 2 -14 3 8 2 1 -14 14
输出样例2:
在这里给出相应的输出。例如:
MAX Sum= 14, MAX K= 9
解题过程和思路如下:
code:
#include<iostream>
using namespace std;
int main()
{
int n,count,k,x;
cin>>n;
int s[n];
for(int i=0;i<n;i++)
cin>>s[i];
int i,j,max=s[0],sum;
for(j=1;j<=n;j++)//j表示取法,例如1个1个的取
{
for(i=0;i<=n-j;i++)//i表示在该种取法下有多少种
{
count=j;
sum=0;
x=i;
while(count--)
//count表示需要累加的次数,x表示累加的首项,为了累加后不改变首项的起点,这里新定义一个x表示累加首项,原来的i则可表示累加的起点
{sum+=s[x];
x++;}
if(sum>=max)
//这里要加‘=’,为了k变大,即最后的k能够达到最大
{max=sum;
k=j;}//k表示该和值下能找到的最大K值
}
}
//之所以在一个一个的取开始到n个n个的取是为保证取的k值能够最大且连续取数的和值最大
cout << "MAX Sum= "<< max << ", MAX K= " << k ;
//输出所求的数值
return 0;
}