目录
题目描述:
样例描述:
代码:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main() {
int N;
int T=0,D=0,E=0;
int repeat;
int a[1005];
memset(a,0,sizeof(a));
scanf("%d",&N);
for(int i=0;i<N;i++)
{
int temp=0;
int dropNum;//一棵树上蔬果的数目
int treeNum;//一棵树上原有的数目
scanf("%d",&repeat);
scanf("%d",&treeNum);
for(int j=1;j<repeat;j++)
{
scanf("%d",&dropNum);
if(dropNum>0)//如果没蔬果
{
if(treeNum>dropNum)//发现掉落了
{
temp=1;
treeNum=dropNum;
}
}
else
{
treeNum+=dropNum; //如果是蔬果
}
}
if(temp==1)//掉果了,就D增加一
{
D++;
a[i]=1;
}
T+=treeNum;
}
for(int i=2;i<N;i++)//判断是不是连着的三个
{
if(a[i-1]==1&&a[i-2]==1&&a[i]==1)
E++;
}
if(a[0]==1&&a[1]==1&&a[N-1]==1)
E++;
if(a[0]==1&&a[N-2]==1&&a[N-1]==1)
E++;
printf("%d %d %d",T,D,E);
return 0;
}
出现问题及解决办法:
1、一棵树可能重新统计多次,故会有多次掉落。所以,一颗树掉落果子了 只需要统计一次,这里我用了temp做跳板。
2、判断连续3个树的时候,我自以为3个树只需要记录一次E就可以了,然而这样是错的。。需要记录3次。
举例:树1,2,3 E的次数为(1,2,3),(2,3,1),(3,2,1) 共3次。啊我个傻狗!!!!