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

标签 arrays 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);

}

输入(以八位数字为例):

1 2 3 1 2 1 5 6

此代码的输出不正确:

3

预期输出为 2,即具有重复项的元素计数(1 有两个重复项,2 有一个重复项)。

那么请解释一下我做错了什么?

最佳答案

您可以使用以下代码来实现相同的目的。它首先对数组进行排序:

#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

关于arrays - 计算数组中重复元素的数量 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44756630/

相关文章:

java - 如何从一个方法返回一个数组并在 Java 的另一个方法中使用它

java - 返回以特定字符串开头的第一行

c - 解决方案在 merge visual studio 2012 后不允许调试/构建/清理

javascript - 合并两个 json 数组并推送项目值

c# - 在矩阵中查找小数

保留一个重复行

matlab - 删除重复条目——matlab 中的变体

mysql - 在 MySQL 中查找多个数据库中的重复值

c - 适用于 Linux 的 Windows Beep()

c - 如何在 C 中使用可变数量的变量?