2017-06-26 88 views
-2

接受大小为N的数组并打印重复元素的总数(发生两次或更多次的元素)。计算数组中重复元素的数量 - C

输入格式:第一行包含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

在这里,程序返回3而不是2,因为3重复(111)。 建议一些想法,以避免这...

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

+0

你允许第一排序呢? – Bathsheba

+0

@Bathsheba是的。 –

+1

那么,一旦你对它进行了排序,就需要遍历数组并检查一个元素是否与前一个元素相同。 – Bathsheba

回答

-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

+0

让我的代码工作http://ideone.com/qOmTz2 –