计算C中数组中重复元素的数量

时间:2016-08-18 19:21:44

标签: c arrays

该程序用于计算每个唯一元素的出现次数。 输出是:

程序:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int *input;
    int n,c;

    printf("Enter the number of elements in the array:");
    scanf("%d",&n);

    input = (int *) malloc(n*sizeof(int));

    printf("Enter %d elements \n",n);
    for(c=0; c<n; c++)
        scanf("%d",input+c);//POINTER NOTATION

    if (sizeof(input) == 0) return 0;

    int prev = input[0];
    int count = 1;
    int i;
    int ARRAYSIZE = sizeof(input) / sizeof(int);

    for (i = 1; i < ARRAYSIZE; i++) 
    {

        if (input[i] == prev)
        {
            count++;
        } 
        else 
        {
            printf("%d=%d ", prev, count);
            prev = input[i];
            count = 1;
        }

    }

    printf("%d=%d\n", prev, count);
    free(input);
    return 0;
}

输入数组中的元素数:10

输入10个元素

1 1 1 1 1 2 2 3 3 6

1 = 1

这里我输入了1次(5次),2次(2次),3次(2次)和6次(一次) 但正如你所看到的,它只给出了1 = 1(1次,但我输入了1次5次。) 有人可以帮帮我吗?感谢。

2 个答案:

答案 0 :(得分:1)

你不需要这个:

int ARRAYSIZE = sizeof(input) / sizeof(int);

使用n代替ARRAYSIZE

sizeof(input)返回指针input的大小,而不是数组的大小。 for循环未执行,输出来自外部printf

答案 1 :(得分:1)

您的程序仅适用于一些小改动。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *input;
    int n, c;

    printf("Enter the number of elements in the array:");
    scanf("%d", &n);

    input = malloc(n * sizeof(int));

    printf("Enter %d elements \n", n);
    for (c = 0; c < n; c++)
        scanf("%d", input + c);//POINTER NOTATION

    int prev = input[0];
    int count = 1;
    int i;
    int ARRAYSIZE = n;

    for (i = 1; i < ARRAYSIZE; i++) {

        if (input[i] == prev) {
            count++;
        }
        else {
            printf("%d=%d ", prev, count);
            prev = input[i];
            count = 1;
        }

    }

    printf("%d=%d\n", prev, count);
    free(input);
    return 0;
}

测试

Enter the number of elements in the array:10
Enter 10 elements 
1 1 1 1 1 2 2 3 3 6
1=5 2=2 3=2 6=1

Process finished with exit code 0