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

时间:2017-06-26 09:28:54

标签: c duplicates

接受大小为N的数组并打印重复元素的总数(出现两次或多次的元素)。

输入格式:第一行包含N.第二行包含N个正整数值,每个值用空格分隔。

输出格式:第一行包含重复元素的数量。(具有重复元素的元素数)

我编写的程序仅适用于两个相同的元素,并且无法读取超过2个重复项。

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

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

}

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


            if(arr[i]==arr[j])
            {
                count=count+1;
                break;
            }

    }
}
printf("%d",count);

}

输入:n = 8

1 2 3 1 2 1 5 6

这里程序返回3而不是2,因为有3个重复(1 1 1)。 建议一些想法来避免这种情况...

预期的输出是2.具有重复的元素的数量(1具有两个重复,2具有一个重复)。 count(1,2)

3 个答案:

答案 0 :(得分:0)

下面的Java程序花费的时间更少,并且非常灵活,根据x数组中的数字增加y数组的大小。

public void countDuplicates() {
    int[] x = {1,2,3,4,5,9,1,0,9,1,1,2,4};
    int[] y = new int[10];
    for(int i =0 ; i< x.length ; i++) {
        y[x[i]] = y[x[i]] + 1;
    }
    int c = 0;
    for (int a:y) {
        System.out.println(c+"---> "+a);
        c++;
    }
}

答案 1 :(得分:-1)

您可以使用以下代码。它首先对数组进行排序:

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

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

    for(i=0;i<n;i++)
    {
        min = i;
        for(j=i+1;j<n;j++)
        {
            if(arr[min]>arr[j])
            {
                min = j;    
            }
        }
        {
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }
    }

    for(i=1;i<n;i++)
    {
        if(arr[i]==arr[i-1])
        {
            count++;
            while(arr[i]==arr[i-1]) i++;
        }
    }
    printf("%d",count);

    return 0;
}

你可以find it working here

答案 2 :(得分:-1)

您可以使用此代码,它将代替元素的所有重复项写入-1,因此它将仅对具有重复项的元素计数一次。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cout << "Enter The Size of the Array ";
    cin >> n;
    int *a = new int[n];
    cout << "Enter The Elements of the Array\n";
    for(int i = 0; i < n; i++) cin >> a[i];
    int count = 0;
    bool duplicate = false;
    for(int i = 0; i < n; i++){
        duplicate = false;
        if(a[i] == -1) continue;
        for(int j = i+1; j < n; j++){
            if(a[j] == a[i]) {
                duplicate = true;
                a[j] = -1;
            }
        }
        if(duplicate) count++;
    }
    cout << count ;
    return 0;
}