题目中.png
题目下.png
#include <iostream>
using namespace std;
int tree[1010] = {0};//最多1010个苹果树
//int sub[1010] = {0};//第i个苹果树上疏果的个数,这个不需要了,要是疏果直接在tree[i]上进行减就行,减的任务交给下面的temp
int flag[1010] = {0};//第i个苹果树上是否有苹果掉落,有是1
int N;//输入有多少个苹果树
int main()
{
cin >> N;
int num;//后面有几个数
int temp;
for (int i=1;i<=N;i++)
{
cin >> num;
cin >> tree[i];//先输入第i棵苹果树的苹果的总数
for (int j=0;j<num-1;j++)
{
cin >> temp;
if (temp > 0)//有掉落的嫌疑,需要进一步判断
{
if (temp != tree[i]) //重新数数之后,发现和原来的数不相同,说明确实掉落了
{
flag[i] = 1;
tree[i] = temp; //重新统计树上的个数
}
}
else //temp<0,就说明是在疏果
{
tree[i] += temp; //直接更新第i棵树疏果之后的总数
}
}
}
int sum = 0;
for (int i = 1; i <= N; i++)
{
sum += tree[i];//统计所有苹果树上苹果的总数
}
cout << sum << " ";
//统计发生掉落的苹果树的棵数
int count = 0;
for (int i = 1; i <= N; i++)
{
if (flag[i] == 1) count++;
}
cout << count << " ";
//统计掉落苹果的组数,围成一圈,连续3棵苹果树的flag都是1,group就+1
int group = 0;
for (int i = 1; i <= N; i++)//一共就统计N次
{
int j = i;
//直到j=N-1的时候,j+2就超过了N
if (j == N - 1)
{
if (flag[j] == 1 && flag[j + 1] == 1 && flag[1]==1)
{
group++;
}
}
else if (j == N)
{
if (flag[j] == 1 && flag[1] == 1 && flag[2]==1)
{
group++;
}
}
else
{
if (flag[j] == 1 && flag[j + 1] == 1 && flag[j + 2]==1)
{
group++;
}
}
}
cout << group << endl;
return 0;
}
网友评论