CCF计算机软件能力认证201909-2小明种苹果(续)(C语言版)

ccf-csp计算机软件能力认证201909-2小明种苹果(续)(C语言版)


题目内容:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


解题思路

  首先思考如何存取数据,由于不会所有数据进行计算,所以我使用了边存边用的方法,每读取一个数据,计算完成后再读取下一个数据。
  第二步三个值t,d,e的计算:
  t的计算很简单,注意每次进行统计数量时更新树上苹果数的值即可;
  d的计算,借用辅助参数d1,另其初始值为0,若发生落果,则另其值变为1,对于每一棵树若d1的值为1,则d的值+1即可;
  e的计算,借用辅助参数e1,另其初始值为0,若这棵树发生落果,则另其值+1,若这棵树未发生落果,则另其值重新变为0,当e1的值大于等于3时即可说明有三棵树连续发生落果。需要注意的是作为一个有n棵树的圈,(1,2,n)和(1,n,n-1)这两个要单独判断,所以我对这四个点单独进行取值最后加在e的值上即可。


提交后得100分的C语言程序如下:

#include<stdio.h>
int main()
{
    int n,m,i;
    int d=0,d1;//掉落棵树以及判断条件
    int e=0,e1;//连续三颗掉落次数以及判断条件
    int fir=0,sec=0,last1=0,last2=0;//前两次和后两次是否发生落果
    int t=0,now,tem;//树上总苹果树以及辅助值
    scanf("%d",&n);
    i=n;
    while(i--){
        scanf("%d %d",&m,&now);
        d1=0;m--;//d1为0代表未发生落果,每次重置
        while(m--){
            scanf("%d",&tem);
            if(tem<=0) now=tem+now;//疏果则直接加
            if(tem>0&&tem!=now) {now=tem;d1=1;}//判断是否落果
        }
        t=t+now;//目前苹果总数
        if(d1==1&&i==(n-1)) fir++;//第一次是否发生落果
        if(d1==1&&i==(n-2)) sec++;//第二次是否发生落果
        if(d1==1&&i==0) last1++;//最后一次是否发生落果
        if(d1==1&&i==1) last2++;//倒数第二次是否发生落果
        if(d1==1) {d++;e1++;}//此次发生则e1+1
        if(d1==0) e1=0;
        if(e1>=3) e++;//e1大于等于三则说明连续三棵发生落果
    }
    if(fir==1&&sec==1&&last1==1) e++;//第一二和最后一次是否同时发生
    if(fir==1&&last2==1&&last1==1) e++;//第一和最后以及倒数第二次是否发生
    printf("%d %d %d",t,d,e);
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值