最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。
这题还是用数组(以后数组可以开全局),for循环的条件最关键(这个可以自己找规律,i一定只能循环到n-m+1的)。
特别注意最后要令sum=0(归位),为了能够进行下一次循环,直至找出最小的和。
为什么数组长度是i+j-1呢?把上面两个for的条件相加可以得到(n-m+1)+m=n+1,所以数组等价于a[n]。
还有一点,min需要赋初值(max初值要小,min初值要大)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,min=100000,sum=0; //max赋初值要大
cin>>n>>m;
int a[100000];
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n-m+1;i++)
{
for(int j=1;j<=m;j++)
sum+=a[i+j-1];
if(min>sum) min=sum;
sum=0; //归位,以便下一次循环
}
cout<<min<<endl;
return 0;
}