小明种苹果(续)
大体的思路是创建苹果数结构体来存放树上的苹果树和掉落的苹果树,然后每次疏果或检查操作更新树上的苹果数,最后遍历每一棵树判断是否有掉落,详情见注释(ps.我是大二初学菜鸡,刚开始写博客,现在阅读量快2000了但一个点赞一条评论都没有,想问下真的有人看我写的博客嘛qwq,能不能评论区戳我一下)
#include<bits/stdc++.h>
using namespace std;
struct Tree{
int applenumber = 0; //定义苹果树结构体,存放树上的苹果数目和掉落的苹果数
int islost = 0;
}tree[1001];
int main(){
int n;
cin>>n;// 苹果树的棵树
for(int i = 0; i < n; i++){
int k;
cin>>k;//疏果或检查的次数
for(int j = 0; j < k; j++){
int temp;
cin>>temp;//输入本次的苹果树(>0)或疏果数(<0)
if(temp > 0&& j != 0){
tree[i].islost = tree[i].applenumber - temp;
tree[i].applenumber = temp; /*如果输入的值大于零说明要检查是否掉落
计算掉落的苹果数并给剩余苹果数赋新值 */
}
else{
tree[i].applenumber += temp;
}//j==1时不用计算是否掉落,之后temp若小于零代表疏果,相加即可
}
//cout<<tree[i].applenumber<<tree[i].islost<<endl;调试的时候用的可以忽视
}
int sum = 0,lost = 0,e = 0;
for(int i = 0; i < n; i++){
sum += tree[i].applenumber;//将所有苹果树的苹果数相加,判断是否有掉落
if(tree[i].islost!=0){
lost++;
}
}
for(int i = 1; i < n-1;i++){
if(tree[i].islost&&tree[i-1].islost&&tree[i+1].islost){//从一开始判断,到n-2是否有连续三个掉落的苹果树
e++;
}
}
if(tree[0].islost&&tree[1].islost&&tree[n-1].islost){//因为循环种植,判断边界条件即第0棵树和第n-1棵树
e++;
}
if(tree[n-1].islost&&tree[n-2].islost&&tree[0].islost){
e++;
}
cout<<sum<<" "<<lost<<" "<<e;
}