2017-05-26 50 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