小明种苹果(续)

2020-03-13  本文已影响0人  HelloSam
题目上.png
题目中.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;
}
上一篇下一篇

猜你喜欢

热点阅读