2019092_小明种苹果(续)代码及分析
题目:


我的代码:
#include<stdio.h>
const int max = 1005;
int main()
{
int i, n, j, m, a, sum = 0, dropt = 0;
int tree[max][2];
scanf("%d",&n);
for(i = 1;i <= n;i++) {
scanf("%d",&m);
scanf("%d",&tree[i][0]); //第i棵树的苹果数量
tree[i][1] = 0; //表示没有发生掉落
for(j = 1;j < m;j++) {
scanf("%d",&a);
if(a <= 0) {
tree[i][0] += a; //因为a是负数,加上a等于减去a
} else if(a > 0) {
if(tree[i][0] != a) { //掉落了
tree[i][0] = a;
tree[i][1] = 1;
}
}
}
if(tree[i][1] == 1) {
dropt += 1;
}
sum += tree[i][0];
}
int e = 0;
tree[0][0] = tree[n][0]; tree[0][1] = tree[n][1];
tree[n+1][0] = tree[1][0]; tree[n+1][1] = tree[1][1];
for(i = 1;i <= n;i++) {
if(tree[i][1] == 0) {
i++;
} else { //==1
if (tree[i-1][1] == 1) {
if (tree[i+1][1] == 1) {
e += 1;
} else {
i += 2;
}
}
}
}
printf("%d %d %d",sum,dropt,e);
return 0;
}
运行通过,耗时78ms,还是挺满意的结果啦。
和第一道题差不了太多,个人认为我的时间在求e(多少组连续掉落)时通过判断连续跳过节点来节省了很多。很多思路和第一道题非常相似,基本上输入时就把需要判断的以及计算的都计算得差不多了。
浙公网安备 33010602011771号