【问题标题】:how to find number of duplicate elements in an array in "c"如何在“c”中查找数组中重复元素的数量
【发布时间】:2021-09-26 07:31:36
【问题描述】:

我在一个网站上找到了以下代码。这段代码有效,但我无法理解。任何人都可以花点时间帮助我理解它。我是机械工程背景,开始学习编程。

#include <stdio.h>
#include <conio.h>

int main()
{
    int a[10],i,j,n,c=0 ;
    printf("Enter size of the array : ");
    scanf("%d", &n);
    printf("\nEnter elements in array :\n ");
    for(i=0; i<n; i++)
    {
        printf("\nelement - %d:",i);
        scanf("%d",&a[i]);
    }
    
    for(i=0; i<n; i++)
    {
        if(a[i]!=-1)
        {
            for(j=i+1; j<n; j++)
            {
                if(a[i]==a[j])
                {
                    c++;
                    a[j]=-1;
                }
            }
         }      
    }
    printf("duplicate numbers in the  array: %d", c);
    return 0;
}

【问题讨论】:

  • 任何特定的部分,你理解有问题?
  • 我不理解嵌套循环部分。
  • OT:关于:printf("Enter size of the array : "); scanf("%d", &amp;n); 代码仅在数组 a[] 中分配 10 个条目。如果用户输入 20 会怎样?

标签: arrays c duplicates


【解决方案1】:

这段代码都是关于循环和索引的。第一个用户提示设置数组的大小并将其保存到 n。第二个用户提示在前面设置的大小为 n 的数组中设置每个索引。现在用于嵌套的 for 循环。首先,如果一个元素的值为-1,则跳过它。为了检查重复项,每个数字必须检查在大于自身的索引处找到的每个元素。因此,元素 1 必须检查元素 2、元素 3,依此类推。元素 2 必须检查元素 3、元素 4,依此类推。如果找到匹配项,则将其中一个元素设置为 -1(以便以后不重复计数)并增加重复计数器。我建议跟踪一个简单的示例,即 a[4] = {1, 2, 1, 3}。

【讨论】:

  • 嗯......我想说的第一件事。这段代码并不完美。如果数组中有两个数字 (-1),它将看不到匹配项。
  • 弄清楚糟糕代码的工作原理有什么意义?最好自己编写可以正常工作的代码。
  • @Генс 这取决于这个 sn-p 是如何工作的。如果定义是count duplicates for positivie numbers,那么代码就可以了……尽管如此,我可能会先对数组进行排序,然后在一次迭代中计算重复项。因为排序是 O(n logn) 而不是 O(n^2) 像这种方法...
  • @Генс 该代码的一个真正问题是,a[10] 被初始化为大小为 10 的固定大小的数组,而不是依赖于 n 的输入值。如果n &lt;= 10 不是什么大问题,但如果n 大于10,它可能会崩溃......
  • @Генс '\0'-1 好多少?如果你在数完之后设置a[i] = '\0',你将无法数零,因为'\0' == 0在C ...
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2011-06-06
相关资源
最近更新 更多