2017-05-26 48 views
-3

我想使一個程序,將計數有多少號碼已經重複例如計數在C++陣列

ARR1 [] = {1,2,3,4,5,1,2重複數}輸出應該是2,因爲數字1和2有重複

arr2 [] = {1,1,1,2,2,3,3,3}輸出應該是3,因爲數字1,2和3有重複

我不能看到具體回答我的問題,因爲答案總是出現與計數多少次呢陣列中的重複次數

反正我的繼承人自己的代碼

#include <iostream> 

using namespace std; 
int main() 
{ 
    int arr[64],n,clamp=0,ctr=0,maxv = 0; 
    cout<<"Enter desired number of element"<<endl; 
    cin>>n; 
    cout<<"Enter "<<n<<" numbers"<<endl; 
    for(int x=0;x<n;x++) 
    { 
     cin>>arr[x]; 
    } 
    for(int i=0;i<n;i++) 
    { 
     if(arr[i]>maxv) 
     maxv=arr[i]; 
    } 
    for(int y=0;y<=maxv;y++) 
    { 
     for(int x=0;x<n;x++) 
     { 
      if(y==arr[x]) 
      { 
       ctr++; 
      } 
      if(ctr>=2) 
      { 
       clamp++; 
       ctr=0; 
       break; 
      } 
     } 
     ctr=0; 
    } 
    cout<<"The amount of repeated elements is "<<clamp<<endl; 
    return 0; 
}  
+0

是排序,然後接受檢查能夠? –

+1

(你也可以使用散列表) –

+0

歡迎來到Stack Overflow。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

回答

1

您可能需要使用一個std ::地圖和檢查開關是否已經在它。 然後,您只需在每次將某項內容推送到此索引時遞增該值。

+0

我也會用std :: map。它比排序數組更快,編程更少 – Thomas

0

我會用一個哈希表(的std ::地圖)至極店如果角色已經在那裏:

#include<map> 

int GetRepeatingCharacterNumber(int* pArray, int nCount) 
{ 
    std::map<int, int> exists; 
    int result = 0; 
    for (int i = 0; i < nCount; ++i) 
    { 
     if (exists.find(pArray[i]) == exists.end()) 
     { 
      //not found 
      //add to map 
      exists[pArray[i]] = 1;   
     } 
     else 
     { 
      //already in there 
      //check if it already counted 
      if (exists[pArray[i]] == 1) 
      { 
       //second time found 
       result++; 
      } 
      exists[pArray[i]] += 1; 
     } 
    } 
    return result; 
} 
0

如在別處所指出的,std::map是最明顯的解決方案,但它可以做得更多簡潔比SEBI的回答

template<typename Iterator, 
     typename Compare = std::less<typename std::iterator_traits<Iterator>::value_type> > 
size_t max_number_of_repetitions(Iterator begin, const Iterator end) 
{ 
    using key = typename std::iterator_traits<Iterator>::value_type; 
    std::map<key, size_t, Compare> rep; 
    size_t max_rep = 0; 
    for(; begin!=end; ++begin) 
    max_rep = std::max(max_rep, ++(rep[*begin])); 
    return max_rep; 
} 

int main() 
{ 
    int arr1 [] = {1,2,3,4,5,1,2}; 
    int arr2 [] = {1,1,1,2,2,3,3,3}; 
    std::cout<<max_number_of_repetitions(std::begin(arr1),std::end(arr1))<<'\n' 
      <<max_number_of_repetitions(std::begin(arr2),std::end(arr2))<<'\n'; 
} 

打印

2 
3