【openjudge】数字统计

来源:互联网 发布:阿里云app测试平台 编辑:程序博客网 时间:2024/04/29 12:52
总时间限制: 
1000ms 
内存限制: 
100000kB
描述
输入n个整数,统计每个数出现的次数.
输入
第一行是一个整数n(1<=n<=1000),接下来n行每行一个整数.
输出
第一行输出总共有多少个不同的整数.
接下来每行输出一个整数及这个整数出现的次数,用空格分隔.
输出的整数的顺序与它们在输入中第一次出现的顺序一致(即在输入中先出现的数,也会在输出中先出现)
样例输入
523212
样例输出
32 33 11 1

这道题用顺序存储的数组也应该能实现。但是估计会超时。并且题目是链式存储的练习。所以还是用链表来解比较好。

#include <stdio.h>#include <malloc.h>typedef struct Lnode{    int data;    int sum;    struct Lnode *next;}LNode,*Linklist;LNode *head;void initlist(Linklist *L){    *L=(LNode *)malloc(sizeof(LNode));    (*L)->next=NULL;    (*L)->sum=1;}void inselem(int n){    int x,i;    LNode *s,*q,*p;    for(i=0;i<n;i++){q=head;p=head->next;scanf("%d",&x);if(p==NULL){initlist(&s);s->data=x;head->next=s;}while(p!=NULL){if(x!=p->data){p=p->next;q=q->next;}else{p->sum++;break;}if(p==NULL){initlist(&s);s->data=x;q->next=s;}}}}int main(){    int n,x;    LNode *q;    head=(LNode *)malloc(sizeof(LNode));head->next=NULL;    scanf("%d",&n);    inselem(n);q=head->next;    while(q!=NULL)    {        printf("%d %d\n",q->data,q->sum);q=q->next;    }    return 0;}


原创粉丝点击