2017-06-26 89 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 –