问题:
比如有10个数
20 40 32 67 40 20 89 300 400 15
把里面相同的数去掉,并打印排序:
15 20 32 40 67 89 300 400
分析:
定义一个v数组,用来存储对应下标的p数组中的数是否被访问过,没有被访问过并且数和前一个相等就存储1,v数组默认存储0
for(int i=0;i<10;i++){
if(v[i]==1){//说明这个数被访问过了,跳过就可以了
continue;
}
for(int j=i+1;j<10;j++){
if(p[i]==p[j]&&v[j]==0){//两个数相等,并且没有被访问过
v[j]=1;
}
}
代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int n;
int v[100];//看是否被访问过
int main(){
srand((int)time(0));
cin>>n;
int p[n];
for(int i=0;i<n;i++){
//int m=rand()%1000+1;
int m;
cin>>m;
p[i]=m;
}
for(int i=0;i<n;i++){
if(v[i]==1){
continue;
}
for(int j=i+1;j<n;j++){
if(p[i]==p[j]&&v[j]==0){
v[j]=1;
}
}
}
int p1[n];
int k=0;
for(int i=0;i<n;i++){
if(v[i]==1){
continue;
}else{
p1[k++]=p[i];
}
}
//插入排序
for(int i=1;i<k;i++){
int temp=p1[i],j;
for(j=i-1;j>=0;j--){
if(p1[j]>temp){
p1[j+1]=p1[j];
}else{
break;
}
}
p1[j+1]=temp;
}
cout<<k<<endl;
for(int i=0;i<k;i++){
cout<<p1[i]<<" ";
}
return 0;
}
结果: