我想制作一个程序来计算重复的数字,例如
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)
您可能希望使用std :: map并检查该键是否已存在。 然后,每次要将某些内容推送到此索引中时,只需增加该值。
答案 1 :(得分:0)
如果角色已经存在,我会使用哈希表(std :: map)存储:
#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;
}
答案 2 :(得分: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