【CSP试题回顾】201909-2-小明种苹果(续)

文章讲述了如何通过编程解决CSP问题,关注苹果在多棵苹果树上的掉落情况统计,包括总苹果数、单次掉落树的数量以及连续三棵树连续掉落的情况。
摘要由CSDN通过智能技术生成

CSP-201909-2-小明种苹果(续)

解题思路

1.初始化变量和输入数据

  • appleDropped[]: 用于记录每棵苹果树是否发生过苹果掉落。数组中的每个元素对应一棵树,如果元素的值为1,则表示该树发生了苹果掉落;如果为0,则表示没有发生掉落。
  • N: 苹果树的总数。
  • m, a0, ai: m 代表对于每棵苹果树,将会有 m 次观察(或称为天数);a0 是第一次观察时的苹果数量;ai 是后续每次观察的苹果变化量。
  • T, D, E: 分别用于统计总苹果数、发生掉落的树的数量以及连续三棵树都发生掉落的情况的数量。

代码的开始部分通过输入获得苹果树的总数 N,然后进入主循环,每次循环处理一棵树的信息。在每棵树的循环中,首先输入该树的观察次数 m 和第一次观察的苹果数量 a0

2.处理每棵树的数据

对于每棵树,代码通过一个内部循环读取接下来每天的苹果变化量 ai。这里有两种情况:

  • 如果 ai 大于零,表示这是一个实际的苹果数量而不是疏果操作。代码检查这个数量是否与前一天的数量 a0 不同。如果不同,标记 appleDropped[i] 为1,并更新 a0 为当前的苹果数量 ai
  • 如果 ai 小于或等于零,这表示进行了疏果操作,应将 a0 增加 ai 的值(注意 ai 是负数)。

3.统计和输出结果

在处理完所有树之后,代码再次遍历所有的树来统计掉落情况:

  • 对于每棵树,如果标记为掉落(appleDropped[i] == 1),则 D(掉落的树的数量)增加。
  • 同时检查这棵树及其后两棵树是否都标记为掉落。如果是,E(连续三棵树都发生掉落的情况的数量)增加。

最后,输出总苹果数 T,发生掉落的树的数量 D,以及连续三棵树都发生掉落的情况的数量 E

完整代码

#include <iostream>
using namespace std;

bool appleDropped[10000]; // 0-未发生掉落;1-发生掉落
long long N, m, a0, ai, T, D, E;

int main()
{
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> m >> a0;
		for (int j = 0; j < m - 1; j++)
		{
			cin >> ai;
			if (ai > 0) // 当前苹果个数-与之前苹果个数比较,检查是否掉落
			{
				if (ai != a0) // 发生掉落
				{
					appleDropped[i] = 1; 
					a0 = ai;
				}
			}
			else // 疏果操作
			{
				a0 += ai;
			}
		}
		T += a0; // 统计苹果总数
	}

	for (int i = 0; i < N; i++) // 掉落情况统计
	{
		if (appleDropped[i]) D++; // 统计发生掉落的果树
		if (appleDropped[i] && appleDropped[(i + 1) % N] && appleDropped[(i + 2) % N]) E++; // 连续三个果树都发生掉落
	}

	cout << T << " " << D << " " << E;
	return 0;
}

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值