201909-01
问题描述
小明在他的果园里种了一些苹果树。为了保证苹果的品质,在种植过程中要进行若干轮疏果操作,也就是提前从树上把不好的苹果去掉。第一轮疏果操作开始前,小明记录了每棵树上苹果的个数。每轮疏果操作时,小明都记录了从每棵树上去掉的苹果个数。在最后一轮疏果操作结束后,请帮助小明统计相关的信息。
输入格式
从标准输入读入数据。
第1行包含两个正整数N和M,分别表示苹果树的棵数和疏果操作的轮数。第1+i行(1 ≤i sN),每行包含M+1个整数aso,ai1,… . , aiMo
其中ao为正整
数,表示第一轮疏果操作开始前第﹔棵树上苹果的个数。aj ( 1 ≤ j ≤M)为零或负整数,表示第j轮疏果操作时从第﹔棵树上去掉的苹果个数。如果为零,表示没有去掉苹果;如果为负,其绝对值为去掉的苹果个数。
每行中相邻两个数之间用一个空格分隔。
输出格式
输出到标准输出。
输出只有一行,包含三个整数T、k和P。其中,
T为最后一轮疏果操作后所有苹果树上剩下的苹果总数(假设苹果不会因为其他原因减少);
k为疏果个数(也就是疏果操作去掉的苹果个数)最多的苹果树编号(如有并列,输出满足条件的最小编号);
P为该苹果树的疏果个数。
相邻两个数之间用一个空格分隔。输入数据保证是正确的,也就是说,每棵树在全部疏果操作结束后剩下的苹果个数是非负的。
算法思想
定义一个结构体Tree存放每棵树原有的果子个数apple,需要多轮疏果的数量存放在数组a中,剩余的果子数量存放在shengyu中,定义最大疏果数delmax为0,。
输入N后,就可定义一个结构体数组tree[N],循环输入每一颗树的苹果数量和每轮的疏果数量,将每颗数经过每轮后剩余的苹果个数存入结构体中,并用f计算此次循环的疏果数;判断f是否大于最大疏果数delmax,若是,则将f赋值给delmax,并把此时下标赋值给max。
再将每棵树剩余的苹果数量相加。输出结果
数据结构设计
struct Tree{
int apple;
int a[1005];
int shengyu;
};
算法步骤
1.输入苹果树棵数N和疏果轮数
2.定义tree[N]存放苹果树原来的苹果数量apple、每轮疏果数数组a、剩余的苹果数量shengyu。
3.将i初始化为0,判断i是否小于苹果棵数N,若是,则转4,
4.输入苹果数量,并将苹果数量赋值给shengyu;
5.将j初始化为0,判断j是否小于轮数M,若是,则转6
6.输入此树每轮疏果数量存入a数组中,将剩余的苹果数量+疏果数量,统计每棵树的疏果总数,f=f-疏果数量。
7.判断f是否大于最大疏果数delmax,若是则转8,若否则转
8.将f赋值