题目描述
算法设计+题目分析
分析题目:
1、设置两个数组分别记录每棵苹果树现存的苹果数量和该苹果树是否发生了掉落情况;
int ap_tree[1010]={0};
int D[1010]={0};//为0代表未出现掉落情况,为1代表出现了掉落情况
2、遍历每行,边输入边判断是否出现了掉落情况(出现了就改变D数组);
3、对D数组进行遍历,记录其中为1的个数,并记录有几个连续的3个1(注意边界处理);
4、打印结果。
注意点+记录点
无
代码(100分)
环境
Visual C++6.0
#include <stdio.h>
int ap_tree[1010]={0};
int D[1010]={0};
int main(){
//freopen("C:\\input.txt", "r", stdin);
int n, m, k;
scanf("%d", &n);
for (int i=0; i<n; i++){
scanf("%d", &m);
for (int j=0; j<m; j++){
scanf("%d", &k);
if (k<ap_tree[i] && k>0) D[i]=1;//出现掉落情况
if (k>0){
ap_tree[i]=k;//第一次的苹果个数或者出现掉落后新的苹果个数
continue;
}
ap_tree[i] +=k;//疏果操作
}
}
int total=0;//树上剩下的苹果总数
int num_tree=0;//有掉落情况的苹果树棵数
int num_group=0;//组数
for (int ii=0; ii<n; ii++){
total+=ap_tree[ii];
if(D[ii]==1) num_tree++;
int pred, succ;
//下面为遇到边界的情况
if (ii-1==-1) pred=n-1;
if (ii-1!=-1) pred=ii-1;
if (ii+1==n) succ=0;
if (ii+1!=n) succ=ii+1;
if (D[pred] && D[ii] && D[succ]) num_group++;//连续3个苹果树有掉落情况
}
printf("%d %d %d", total, num_tree, num_group);
return 0;
}
感谢链接
无