小白上路,大神自行飘过。
欢迎交流,相互学习。
package demo;
import java.util.Scanner;
public class 小明种苹果_续 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input = new Scanner(System.in);
int N = input.nextInt();
//定义java锯齿状数组
int tree[][] = new int[N][];
int i,j;
for(i = 0;i < N; i++) {
int m = input.nextInt();
tree[i] = new int[m + 1];
//m不仅作为数组第一列的值,也决定数组横向的长度
tree[i][0] = m;
for(j = 1; j < m + 1;j++) {
tree[i][j] = input.nextInt();
}
}
int T = 0;//剩余总苹果数量
int D = 0;//发生苹果掉落的苹果树的数量
int E = 0;//发生相邻掉落的苹果树数量
int t[] = new int[N];//储存每一颗苹果树苹果的实际数目
int A[] = new int[N];//储存每一颗苹果树苹果计算上的理论数目,与t[]对比可以确定是否发生掉果
int k[] = new int[N];//储存掉果标记
for(i = 0; i < N; i++) {
t[i] = tree[i][1];
k[i] = tree[i][1];
for(j = 1; j < tree[i].length;j++) {
//对比,若发生掉果,标记并跳入下一循环
if(tree[i][j] > 0) {
t[i] = tree[i][j];
if(t[i] != k[i]) {
A[i] = 1;
continue;
}
else {
A[i] = 0;
}
}
else {
t[i] += tree[i][j];
k[i] += tree[i][j];
}
}
T += t[i];
}
//掉果标记求和求出掉果颗数,模运算求出发生相邻掉果的颗数
for(i = 0; i < N; i++) {
if(A[i] == 1) {
D++;
if(A[(i + N - 1) % N] == 1 && A[(i + 1) % N] == 1) {
E++;
}
}
}
System.out.println(T + " " + D + " " + E);
}
}