题解 | #记负均正II#

记负均正II

https://www.nowcoder.com/practice/64f6f222499c4c94b338e588592b6a62

#include <stdio.h>
#include <stdlib.h>

struct number{
    int num;
    struct number *next;
    // struct number *prev;
};

int findNumber(struct number *pointer)
{
    struct number *p = pointer;
    int cnt=0;

    while(p)
    {
        if(p->num<0)
        {
            cnt++;
        }
        p=p->next;
    }

    return cnt;
}

float getAverage(struct number *pointer)
{
    struct number *p = pointer;
    float sum=0.0,average=0.0;
    int cnt=0;

    while(p)
    {
        if(p->num>0)
        {
            sum+=p->num;
            cnt++;
        }
        p=p->next;
    }

    if(cnt>0)
    {
        return average=sum/cnt;
    }

    return 0.0;
}

int main() {
    float average=0.0;
    int a,count=0;
    //  printf("zheli ok");
    struct number *head=NULL,*end=head;
    while (scanf("%d", &a) != EOF) { // 注意 while 处理多个 case
        // printf("zheli ok");
       struct number *newnode =  (struct number *)malloc(sizeof(struct number));
       newnode->num=a;
       newnode->next=NULL;
       if(head==NULL)
       {
            head=newnode;
            end=head;
       }
        end->next=newnode;
        end=newnode;
        if(end->next!=NULL)
        {
            end->next=NULL;
        }

        count=findNumber(head);
        average=getAverage(head);

        // while(head)
        // {
        //     printf("%d ",head->num);
        //     head=head->next;
        // }
    }

    printf("%d\n%.1f",count,average);
    return 0;
}

这里使用单链表保存输入数据,避免了一次性开辟大数组带来的坏处。需要注意的是链表只有一个节点时,头指针和尾指针都指向同一节点。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 11:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务