我觉得这个题最难的部分应该是理解题意。
理解了其实很简单,一个数组先判断他的和是不是0;
如果不是零,直接输出整个数组就可以了;
如果是0,判断它是全为零,还是有非零元素;
全为零肯定不行输出NO;
不全为零就找到数组的第一个不为零的数,然后将它和它之前的数划为一个子数列,之后的划为另一个子数列;
代码如下:
#include<stdio.h>
#include<string.h>
int a[105];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
int flag=0,sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
if(a[i]!=0&&flag==0)
{
flag=i;
}
}
if(flag==0)
{
printf("NO\n");
continue;
}
if(sum!=0)
{
printf("YES\n1\n");
printf("1 %d\n",n);
}
else
{
printf("YES\n2\n");
printf("1 %d\n",flag);
printf("%d %d\n",flag+1,n);
}
}
}```