给定长度为n的整数数列:a0,a1,…,an-1,以及整数S。这个数列会有连续的子序列的整数总和大于S的,求这些数列中,最小的长度。
看了课直接写了个
自己写了一个~
#include <stdio.h>
int main()
{
int n,i,s,m,flag=0;
int h,r;//首尾标识
int sum=0,len=0;//总和,长度
int num[10000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
scanf("%d",&s);
for(h=0,r=0;r<n;r++)
{
sum += num[r];
while(sum >= s)
{
sum -= num[h];
h++;
if(flag == 0)//当第一次寻找到 >=s时用len记录长度值,之后用m记录,直接与len作比较
len=r-h+2;//注意是先h++,再求长度,所以r-h要+2才是长度
else
m=r-h+2;
flag=1;
if( len > m)
len =m;
}
}
if(len)
printf("%d",len);
else printf("所有数加起来都小于s哦");
return 0;
}