一、问题描述
![](https://img-blog.csdnimg.cn/20210928195406525.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5oiR5LiN55yL5pyI5Lqu77yB,size_16,color_FFFFFF,t_70,g_se,x_16)
二、问题分析
对于输入的一个数列,求这个数列的满足以下条件的区间个数:该区间的元素和与元素积相等。思路就是计算每一个区间的元素和与元素积,如果相等就计数加一。
获取每个区间采用前缀和跟前缀积的方法,详见代码。
注:这种方法也只能通过个别案例,不能完全通过。
三、代码
#encoding:utf-8
num=0
n=int(input())
l=list(map(int,input().split()))
qzh=[l[0]]#前缀和列表
qzj=[l[0]]#前缀积列表
for i in range(1,len(l)):#求前缀和、前缀积
a=qzh[i-1]+l[i]
qzh.append(a)
a=qzj[i-1]*l[i]
qzj.append(a)
for i in range(n):#比对每一个序列
if qzh[i]==qzj[i]:
num+=1
for j in range(i+1,n):
if qzh[j]-qzh[i]==qzj[j]/qzj[i]:
num+=1
print(num)