c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?

例如,a[6]=0,1,1,5,1,5,如何通过运算输出“数组共有2个数字5”和“数组共有3个数字1”?... 例如,a[6]=0,1,1,5,1,5,如何通过运算输出“数组共有2个数字5”和“数组共有3个数字1”? 展开
 我来答
1259049661
2018-12-16 · TA获得超过1552个赞
知道小有建树答主
回答量:333
采纳率:88%
帮助的人:212万
展开全部

如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int *a;
int i;
scanf("%d", &n);
a = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i ++)
{
    scanf("%d", &a[i]);
}
for(i = 0; i < n - 1; i ++)
{
        for(int j = 0; j < n - i - 1; j ++)
        {
            if(a[j] > a[j+1])
            {
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
}
int tmp = a[0];
int count = 1;
for(i = 1; i < n; i ++)
{
    if(tmp == a[i])
    {
        count ++;
    }
    else
    {
        if(count > 1)
        {
            printf("数组共有%d个数字%d\n", count, a[i - 1]);
        }
        tmp = a[i];
        count = 1;
    }
}
if(count > 1)
{
    printf("数组共有%d个数字%d\n", count, a[i - 1]);
}
free(a);
return 0;
}

我的思路是,先排序,再输出。

追问
a = (int *)malloc(sizeof(int) * n);
这一步是什么意思,可能我还没有学到,不懂
追答
这一步,C语言中,你如果未知数组大小,就需要在内存中创建一个数组,使用malloc申请内存,让指针指向该内存。
而由于这里申请了空间,在不用的时候需要使用free释放这一块空间。
如果你已经知道数组大小,直接使用int a[6];就行了
yinfengnong
2018-12-16 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2292万
展开全部

代码如下 :

#include <stdio.h>

#define MAX 100 // 数组最大数

typedef struct _Node {
int value;
int count;
}Node;

typedef struct {
Node values[MAX];
int size;
}List;

Node *List_Add(List *pList, int value) {

Node *pNode = &pList->values[pList->size];

pNode->value = value;
pNode->count = 1;

pList->size++;

return pNode;
}

Node *List_Find(List *pList, int value)
{
int i;

for (i = 0; i < pList->size; i++) {
if (pList->values[i].value == value) {
return &pList->values[i];
}
}

return NULL;
}

int main()
{
int numbers[MAX], n, i;
List list;

scanf("%d", &n);

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

list.size = 0;

for (i = 0; i < n; i++) {

Node *pNode = List_Find(&list, numbers[i]);

if (pNode != NULL) {
pNode->count++;
}
else {
List_Add(&list, numbers[i]);
}
}

for (i = 0; i < list.size; i++) {
if (list.values[i].count >= 2) {
printf("数组共有%d个数字%d\n", list.values[i].count, list.values[i].value);
}
}

return 0;
}

运行结果:

追问
能讲一下大致的思路吗?
追答
思路是定义一个数据结构Node保存数字和数字的对应出现次数。程序首先从键盘读取统计的数字个数 n, 然后再从键盘读取 n 个数字保存到数组 numbers 中。
然后,第二个 for 循环进行统计每个数字出现的次数,保存到 List Node 中。
最后,第三个 for 循环进行输出数字出现次数count大于2统计的结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式