C++数组中数据去重排序问题。
数组p[5000]中,有数据,000~999,和001~777,请问,如何去掉数组中重复的数据只保留一个,并且把去重后的数据进行从小到大的排序。请写出代码+50分。...
数组p[5000]中,有数据,000~999,和001~777,请问,如何去掉数组中重复的数据只保留一个,并且把去重后的数据进行从小到大的排序。请写出代码+50分。
展开
5个回答
展开全部
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int i = 0, j = 0;
int p[5] = {1,2,5,2,4}, t[5];
sort(p,p+5); //全部排序
while (i < 5-1) //去重复
{
if (p[i] != p[i+1])
t[j++] = p[i+1];
++i;
}
for (i = 0; i < j; i++) //输出
cout<<t[i]<<" ";
return 0;
}
展开全部
#include<iostream>
#include<algorithm>
using namespace std;
/*申请标志数组算法:设立访问标志数字,初始化为0,访问到N时将标志数字的第N个元素置为N。最后遍历该数组,若标志数组中对应值为非0,则顺序存储该数字于原数组中,最后返回去除重复数字后的有效数的个数*/
int RemoveRep(int array[], int n)
{
int *arrayflag = (int *)malloc(n*sizeof(int));
int left = 0, i = 0;
while(i<n)
arrayflag[i++] = false; //初始化标志数组
for(i=0;i<n;i++)//剔除算法
arrayflag[array[i]] = array[i]; //将出现过的数保存到对应的位置
for(i=0;i<n;i++) //取出有效数
{
if(arrayflag[i] != false)
array[left++] = arrayflag[i];
}
return left;
}
int main()
{
int left;
int p[5000];
left = RemoveRep(p,5000);
sort(p,p+left);
}
参考资料:
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
抱歉,不知道数组p输入方式
#include<iostream>
using namespace std;
int ans[1000];
int p[5000];
int main(){
for(int i=0; i<5000; i++){
cin>>p[i];
}
for(int i=0; i<5000; i++){
ans[p[i]]++;
}
for(int i=0; i<1000; i++){
if(ans[i]!=0)
cout<<i<<endl;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然是C++用标准库就行啊 先排序(自己排也行 sort 也行 )然后用 unique()===删除相邻的重复元素 关于unique()的用法查查就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <set>
#define MAXN 5000
using namespace std;
int arr[MAXN];
int main()
{
int n;
cin >> n;
set < int > s;
set < int >::iterator iter;
for ( int i = 0; i < n; i++ ){
cin >> arr[i];
s.insert( arr[i] );
}
for ( iter = s.begin(); iter != s.end(); ++iter )
cout << *iter << " ";
return 0;
}
#include <set>
#define MAXN 5000
using namespace std;
int arr[MAXN];
int main()
{
int n;
cin >> n;
set < int > s;
set < int >::iterator iter;
for ( int i = 0; i < n; i++ ){
cin >> arr[i];
s.insert( arr[i] );
}
for ( iter = s.begin(); iter != s.end(); ++iter )
cout << *iter << " ";
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询