有 N 朵花,编号为 1…N(1≤N≤100),排列成一行。花 i 有 pi 朵花瓣(1≤pi≤1000)。 你决定给这些花拍些照片。具体地说,对于每一对满足 1≤i≤j≤N 的花 (i,j),你会给从花 i 到花 j 之间的所有花(包括 i 和 j)拍一张照。
后来 Bessie 查看这些照片时注意到有些照片里存在平均的花,所谓平均的花指的是一朵恰好有 P 朵花瓣的花,其中 P 等于照片中所有花的花瓣数量的平均值。
你的照片中有几张存在平均的花?
输入格式(从终端/标准输入读入): 输入的第一行包含 N。第二行包含 N 个空格分隔的整数 p1…pN。
输出存在平均的花的照片数量。
4 1 1 2 3
6 每张仅包含一朵花的照片均会被计入答案(在这个样例中有 4 张)。另外,在这个样例中 (i,j) 为 (1,2) 和 (2,4) 所对应的照片也存在平均的花。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;//花的数量
int a[110];//每个花的花瓣数
int m;//答案
int orz(int i,int j)//i,j为区间首尾
{
int t=0;//平均数
for(;j<=n;j+=1,i+=1)
{
for(int g=i;g<=j;g++)
{
t+=a[g];
}
t/=(j-i+1);//求平均
for(int g=i;g<=j;g++)
{
if(a[g]==t)
{
m++;
break;
}
} //找平均的花
}
if(j==n)return 0;
else orz(1,j+1);//扩大区间
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
orz(1,2);
printf("%d",m+n);
return 0;
}
大佬请帮忙看一下吧,谢谢啦