随机产生一个有n个元素的数组,数组元素值为随机生成的1—n的正整数,一般来说,其中会有一些元素的值是重复的,也有些整数未出现在数组中,编写程序找出一维数组中重复出现在数组中的整数值是多少,重复了多少次(n由键盘输入,需要判断n的合法性)。(如,n=5,则随机生成一个数组的元素分别为{3,2,5,5,1},则输出为:重复的整数值为5,5重复了2次)
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int random(int a,int b)
{
return a+rand()%(b-a+1);
}
void getArray(vector<int> &v,int n)
{
for(size_t i=0;i<n;++i)
{
v.push_back(random(0,n));
}
}
int findRepeatNumber(vector<int>& nums)
{
if (nums.empty())
return -1;
for (int i = 0; i < nums.size(); ++i)
{
while (nums[i] != i)
{
if (nums[i] == nums[nums[i]])
return nums[i];
else
swap(nums[i], nums[nums[i]]);
}
}
return -1;
}
int main()
{
int n=0;
vector<int> v;
cin>>n;
getArray(v,n);
for(size_t i=0;i<n;++i)
{
cout<<v[i];
}
cout<<"重复的数值:"<<findRepeatNumber(v);
return 0;
}