题解 | #记负均正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;
}

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

全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务