csp2019-9小明种苹果

题目描述
小明在他的果园里种了一些苹果树。为了保证苹果的品质,在种植过程中要进行若干轮疏果操作,也就是提前从树上把不好的苹果去掉。第一轮疏果操作开始前,小明记录了每棵树上苹果的个数。每轮疏果操作时,小明都记录了从每棵树上去掉的苹果个数。在最后一轮疏果操作结束后,请帮助小明统计相关的信息。
输入格式
从标准输入读入数据。
第1行包含两个正整数N和M,分别表示苹果树的棵数和疏果操作的轮数。
第1+i行(1<= i <= N),每行包含M+1个整数ai0,ai1,…,aiM。其中ai0为正整数,表示第一轮疏果操作开始前第i棵树上苹果的个数。aij(1 <= j <= M)为零或负整数,表示第j轮疏果操作时从第i棵树上去掉的苹果个数。如果为0,表示没有去掉苹果;如果为负,其绝对值为去掉的苹果个数。
每行中相邻两个数之间用一个空格分隔。
输出格式
输出到标准输出。
输出只有一行,包含三个整数T、k和P。其中,
T为最后一轮疏果操作后所有苹果树上剩下的苹果总数(假设苹果不会因为其它原因减少);
k为疏果个数(也就是疏果操作去掉的苹果个数)最多的苹果树编号;
P为该苹果树的疏果个数。
相邻两个数之间用一个空格分隔。输入的数据保证是正确的,也就是说,每棵树在全部疏果操作结束后剩下的苹果个数是非负的。
样例1
输入:

3 3
73 -8 -6 -4 
76 -5 -10 -8
80 -6 -15 0

输出:

167 2 23

样例解释:
第1棵苹果树的疏果个数为8+6+4 = 18, 第2棵为5+10+8 = 23,第3棵为6+15+0 = 21,因此最后一轮疏果操作后全部苹果树上的苹果个数总和为(73 -18)+ (76 - 23)+ (80 - 21)= 167,疏果个数最多的是第2棵树,其疏果个数为23。
样例2
输入:

2 2
10 -3 -1
15 -4 0

输出:

17 1 4

样例解释:
两棵树的疏果个数均为4,应输出编号最小的第1棵数。

子任务
1
|aij|<= 106,对所有1 <= i <= N, 0<= j <= M。

csp2019-9小明种苹果_第1张图片

#include
using namespace std;
const int N=1001;
int a[N][N],tree_drop[N];
int main()
{
 
	int n,m,sum=0,tree=0;
	int i,j,max;
	cin>>n>>m;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m+1;j++)
		{
			cin>>a[i][j];
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<m+1;j++)
		{
			sum = sum+a[i][j];
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=1;j<m+1;j++)
		{
			tree = tree+a[i][j];
		}
	   tree_drop[i] = -tree;
	   tree = 0;
	}
	max = tree_drop[0];
	int id = 1;
	//当tree_drop[i]一样时,选出编号小的
	for(i=1;i<n;i++)
	{
		if(tree_drop[i]>max)
		{
			max = tree_drop[i];
			id= i+1;
		}
	}

	cout<<sum<<" "<<id<<" "<<max;
	
 } 

碰到的坑:设置二维数组时可以设置成全局变量,以免数据过大,造成小黑框无故消失,同时常量N的设置应尽可能大,以免数组越界。
在假设三棵树的掉落果子数相同时,要输出编号1这儿也需要考虑到位。
小明种苹果(续)
201909-2
试题名称: 小明种苹果(续)
时间限制: 1.0s
内存限制: 512.0MB
问题描述:

csp2019-9小明种苹果_第2张图片

#include
#include
using namespace std;
int main()
{
 int n,i,x,j;
 int U[1001];
 int a,b;
 memset(U,0,sizeof(U));
 int T=0,D=0,E=0;
  cin>>n;
  for(i=0;i<n;i++)
  {
  	cin>>x;
  	if(x>0)
  	{
  	cin>>a;
  	for(j=2;j<x+1;j++)
  	{
  		cin>>b;
  		if(b<=0)
  		{
  			a=a+b;
		  }
		  else if(a!=b)
		  {
		  	U[i]=1;
		  	a=b;
		  }
  	}
  	if(U[i]==1)D++;
  	T=T+a;
	}
  }
  
  
  	if(n>2)
  	{
  		for(i=0;i<n;i++)
  		{
  		if(U[(i-1+n)%n]==1&&U[i]==1&&U[(i+1)%n]==1)
  		E++;
		  }
  		
	  }
  
  cout<<T<<" "<<D<<" "<<E;
  
}
本题的坑:由于考试会刚做完第一题,所以第二题会多设置数组,其实并不,设置一个数组用来统计是否有苹果掉落,输入的时候也无需设置数组。数组初始化利用函数memset(U,0,sizeof(U)),本身memset函数无需头文件,但是sizeof,是测试数组长度的,需要头文件。。

你可能感兴趣的:(算法)