• 【openjudge】数字统计


    总时间限制: 
    1000ms 
    内存限制: 
    100000kB
    描述
    输入n个整数,统计每个数出现的次数.
    输入
    第一行是一个整数n(1<=n<=1000),接下来n行每行一个整数.
    输出
    第一行输出总共有多少个不同的整数.
    接下来每行输出一个整数及这个整数出现的次数,用空格分隔.
    输出的整数的顺序与它们在输入中第一次出现的顺序一致(即在输入中先出现的数,也会在输出中先出现)
    样例输入
    5
    2
    3
    2
    1
    2
    样例输出
    3
    2 3
    3 1
    1 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;
    }
    


  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082168.html
Copyright © 2020-2023  润新知