CCF-CSP备考记录:201909-2 小明种苹果(续)

CCF-CSP备考记录:201909-2 小明种苹果(续)

由于最近在备考2020年三月份的CCF,刚开始刷真题,感觉需要把自己碰到的一些问题记录下来,既能方便自己回头翻阅,也给大家提供一些经验教训。
**本人第一次写博客,如有不足之处还望留言批评指正。**

题目

CCF-CSP备考记录:201909-2 小明种苹果(续)_第1张图片
CCF-CSP备考记录:201909-2 小明种苹果(续)_第2张图片
CCF-CSP备考记录:201909-2 小明种苹果(续)_第3张图片

思路分析

整体思路

	用数组存储果树的数据,依次读取。
	如果数据大于零,则比较数据和当前苹果数量,数据小于当前苹果数量则意味着出现掉果,掉果数量加一,并在记录数组中做标记;
	数据小于零,则用当前苹果数量加上蔬果数量。
	计算连三颗果树掉果情况时,在记录数组中,i从0~n,第i、(i+1)%n、(i+2)%n个都有标记时,组数加一。

经验总结

一颗果树可能出现**多次掉果**情况,但在掉果数量上只能**记录一次**!

100分c++代码:

#include 
using namespace std;
#define M 1002
int n,m,nb[M]= {0},dro[M]= {0};
int all=0,drop=0,e=0;
int tmp=0;
int main(int argc, char** argv) {
	cin>>n;
	for(int i=0; i<n; i++) {
		cin>>m;
		for(int j=0; j<m; j++) {
			cin>>nb[j];
		}
		tmp=nb[0];
		for(int j=1; j<m; j++) {
			if(nb[j]>0) {
				if(nb[j]<tmp) {
					if(dro[i]==0) {
						drop++;//有掉果,记录一次即可,不可多次记录 !!!!! 
						dro[i]=1;//记录
					}
					tmp=nb[j];
				}

			} else tmp+=nb[j];
		}
		all+=tmp;
	}
	if(drop>=3)
		for(int i=0; i<n; i++) {
			if(dro[i]&&dro[(i+1)%n]&&dro[(i+2)%n]) e++;
		}

	cout<<all<<" "<<drop<<" "<<e;
	

THE END!

你可能感兴趣的:(CCF-CSP备考记录:201909-2 小明种苹果(续))