CTF计算机认证试题201909-2:小明种苹果(续)

这篇博客讨论了一种使用数组表示环形排列树木并判断连续三棵树是否掉落苹果的问题。代码示例中,作者通过循环检查大部分情况,并额外处理了首尾相连的特殊情况,从而确保所有可能的连续三棵树组合都被考虑。最后,代码输出了总共的苹果数、掉落苹果的树的数量以及连续三棵掉落苹果的组合数。
摘要由CSDN通过智能技术生成

在这里插入图片描述在这里插入图片描述
本题要注意树是围成一圈的,而我使用的是数组。判断连续三棵树时需要单独查看第1,2,N和第1,N-1,N的情况,例如假如有六棵树按如下方式排列。
1 2
6 3
5 4

通过循环只能判断123,234,345,456,而无法直接判断612,561.

for(int i=1;i<N-1;i++){
	if(tree[i-1].combine!=0&&tree[i].combine!=0&&tree[i+1].combine!=0)	//判断连续三棵树掉落苹果 
		E++;
}

因此我采用两个if语句单独判断这两种情况。

if(tree[0].combine!=0&&tree[1].combine!=0&&tree[N-1].combine!=0)	E++;	//一圈树,单独判断两种情况 
if(tree[0].combine!=0&&tree[N-1].combine!=0&&tree[N-2].combine!=0)	E++;

满分代码:

#include<iostream>
using namespace std;
struct node{
	int num,ans[1000],sum,combine;
	tree(){
		combine=0;
	}
}tree[1000];
int main(){
	int N,m[1000],D=0,T=0,E=0;
	cin>>N;
	for(int i=0;i<N;i++){
		cin>>m[i]>>tree[i].num;					//记录操作次数和树上苹果数 
		for(int j=0;j<m[i]-1;j++){
			cin>>tree[i].ans[j];
			if(tree[i].ans[j]>0){	
				if(tree[i].ans[j]<tree[i].num){				//查看是否有苹果掉落 
					tree[i].combine++;
				}
				tree[i].num=tree[i].ans[j];							//重新记录后清空疏果数 
			}
			else{
				tree[i].num+=tree[i].ans[j];				//每次疏果后更新树上苹果数量 
			}
		}
		T+=tree[i].num;						//苹果总数 
	}
	for(int i=1;i<N-1;i++){
		if(tree[i-1].combine!=0&&tree[i].combine!=0&&tree[i+1].combine!=0)	//判断连续三棵树掉落苹果 
			E++;
	}
	if(tree[0].combine!=0&&tree[1].combine!=0&&tree[N-1].combine!=0)	E++;	//一圈树,单独判断两种情况 
	if(tree[0].combine!=0&&tree[N-1].combine!=0&&tree[N-2].combine!=0)	E++;
	for(int i=0;i<N;i++)
		if(tree[i].combine!=0)	D++;				//判断有几棵树掉落苹果 
	cout<<T<<" "<<D<<" "<<E;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值