小明种苹果(续)

tech2025-12-27  6

小明种苹果(续)第十七次CCF计算机软件能力认证第二题

题目描述思路具体代码

题目描述

小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆。为了保证苹果的品质,在种植过程中要进行疏果操作。为了更及时地完成疏果操作,小明会不时地检查每棵树的状态,根据需要进行疏果。检查时,如果发现可能有苹果从树上掉落,小明会重新统计树上的苹果个数(然后根据之前的记录就可以判断是否有苹果掉落了)。在全部操作结束后,请帮助小明统计相关的信息。

思路

对每棵果树的信息进行判断是否有苹果掉落,然后最后进行统计。 判断过程如下: 第一个输入,是果树最开始的苹果数量 然后判断输入的正负 负数,表示摘掉的苹果数量 正数,表示重新进行了统计 用(最开始的苹果数量-摘掉的总苹果数量)和当前的苹果数量进行比较,如果不相等,表示有苹果掉落,记录掉落的苹果数量 果树上最后的数量为,初始数量-摘掉数-掉落数

当然还有不同的算法,这种仅供参考

具体代码

#include <iostream> using namespace std; long int a[1001][1005];//记录每个果树的操作 long int b[1001]; long int dis[1001];//记录该果树摘掉的苹果数量 long int yi[1001];//记录掉落的苹果数量 bool test[1001];//记录果树是否有苹果掉落 bool test2[1001]; int main() { int N; cin>>N; int M; int D; D=0; int i,k; for(i=0;i<N;i++)//初始化 { dis[i]=0; test[i]=false; test2[i]=false; yi[i]=0; } for(i=0;i<N;i++)//对每棵果树进行输入和判断 { cin>>M; cin>>a[i][0];//一开始果树上的苹果数量 for(k=1;k<M;k++) { cin>>a[i][k]; if(a[i][k]<0)//摘落 dis[i]-=a[i][k]; else if(a[i][k]>0) { b[i]=a[i][k]; if((a[i][0]-dis[i]-yi[i])!=b[i]) { if(!test[i])// D++; test[i]=true; yi[i]+=(a[i][0]-dis[i]-yi[i]-b[i]); } } } } long long int sum; int E; for(i=0,sum=0;i<N;i++) { sum+=(a[i][0]-dis[i]-yi[i]); } E=0; for(i=1;i<N-1;i++) { if(test[i]&&test[i-1]&&test[i+1]) E++; } if(test[0]&&test[N-1]&&test[1]) E++; if(test[N-1]&&test[N-2]&&test[0]) E++; cout<<sum<<' '<<D<<' '<<E; return 0; }
最新回复(0)