解题思路:由于题目只需要求算T、k、P即可,所以我们可以在每次把数据读入时对数据进行及时的处理,而并不需要将每次疏果的个数存储过后再进行遍历,以免造成空间的浪费。
依据题意,我们每一轮可以读入M+1条数据,总的T可以由每一轮得到的Ti累加而得到,而每一轮的Ti可由每一轮的初始苹果个数(每轮读入的第一条数据)- 每一轮的Pi(每轮读入的后M条数据绝对值之和)得到。因此我们只需要用数组的将每一轮计算出来的Pi进行存储,最后遍历这个数组,最大的Pi即为P的值,而其所对应数组的下标值+1即为k值。
测试案例供复制:
3 3
73 -8 -6 -4
76 -5 -10 -8
80 -6 -15 0
2 2
10 -3 -1
15 -4 0
代码:
package AppleTree;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int N=0,M=0;
Scanner sc = new Scanner(System.in);
N = sc.nextInt();//苹果树棵数
M = sc.nextInt();//疏果轮数
int T=0;//剩余总苹果数
int[] clear = new int[N];//存储每棵树M轮的疏果总数(非负数)
for (int i = 0; i < N; i++) {
int a0 = sc.nextInt();//该树初始苹果数
for (int t = 0; t < M; t++) {//M轮疏果
clear[i] += -sc.nextInt();
}
T += (a0 - clear[i]);
}
int k=0,P=0;
for (int i=0;i<N;i++) {//遍历每棵树疏果的总数(非负数),找出最大值及其下标
if (clear[i] > P) {
P = clear[i];
k = i+1;
}
}
System.out.println(T+" "+k+" "+P);
}
}