1) 第一种思路很简单,在全局定义一个大数组,所有元素初始为0,每输入一个数时,就在以这个数为数组下标的元素加一,最后输出结果。

参考代码如下:

#include <stdio.h>

int arr[1000000];

int main(void)
{
    int n;
    scanf("%d", &n);

    int tmp;
    int i;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &tmp);
        arr[tmp]++;
    }

    for (i = 0; i < 1000000; i++)
    {
        if (arr[i] != 0)
        {
            printf("%d %d\n", i, arr[i]);
        }
    }


    return 0;
}

2) 第二种方法就是比较直接的想法,将输入的所有数存放在一个数组中,先对数组进行从小打到排序,然后对该数组进行处理。

参考代码如下:

#include <stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);

    int arr[n];
    int i;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    int j;
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (arr[i] > arr[j])
            {
               int tmp = arr[i];
               arr[i] = arr[j];
               arr[j] = tmp;
            }
        }
    }
    
    //处理方式如下:
    i = 0;
    int tmp;
    int num = 0;
    while (i != n)
    {
        tmp = arr[i];
        while (arr[i] == tmp)
        {
            num++;
            i++;
        }
        printf("%d %d\n", tmp, num);
        num = 0;
    }

    return 0;
}


点赞(1)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

早早早羊早草草 3年前 回复TA
@林某蛋炒饭 抱歉,我傻了,因为数组最大是1000000,所以最大下标应该是999999,解决了
早早早羊早草草 3年前 回复TA
@林某蛋炒饭 老哥虽然可能你不会再看了,我把 i <= 1000000改成 i < 1000000就过了,虽然不确定原理是什么,希望有大佬能解答
林某蛋炒饭 4年前 回复TA
#include<stdio.h>

int a[1000000]={0};

int main()
{
	int n,m;
	int i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&m);
		a[m]++;
	}
	for(i=1;i<=1000000;i++)
	{
		if(a[i]>0){
			printf("%d %d\n",i,a[i]);
		}
	}

	return 0;
}
麻烦各位看下哪里错了
ALonPursuit 4年前 回复TA
代码第八行,明显错误