删除序列中相同的数

来源:互联网 发布:阿里云新手教程 编辑:程序博客网 时间:2024/06/06 01:27

//删除序列中相同的数
/*#include <iostream>
using namespace std;

int main(){
 int a[]={2,1,3,2,4,6,10,9,8,7,6,5,4,8,8,10};
 int i,j=1,n,num=1;
 n=sizeof(a)/sizeof(int);
 cout<<"原序列为:";
 for (i=0;i<n;i++)
  cout<<a[i]<<" ";
 cout<<endl;
 int k=n;
 for (k;k>1;k--)//这里循环的次数应该为数组元素个数-1;
  for(i=0;i<n-1;i++)
   if (a[i+1]<a[i])
   {
    int temp=a[i+1];
    a[i+1]=a[i];
    a[i]=temp;
   }
 cout<<"按照从小到大重新排序后的序列为:";
 for (i=0;i<n;i++)
  cout<<a[i]<<" ";
 cout<<endl;
 for (i=0;i<n-1;i++)
  if(a[i]!=a[i+1])
   num++;
  cout<<"序列中不同的数字有"<<num<<"个"<<endl;//计算数组a中有多少个不同的数字.
  //根据这个来定义b数组的大小,虽然不能直接定义为b[num]
 int b[10];
 b[0]=a[0];
 for (i=1;i<n;i++)
 {
  if(a[i]!=a[i-1])
  {
   b[j]=a[i];
   j++;
  }
 }
 cout<<"删除相同数后的序列为:";
 for (i=0;i<j;i++)
  cout<<b[i]<<" ";
 cout<<endl;
 return 0;
}*/

//通过函数调用的方法来完成删除工作
/*#include <iostream>
using namespace std;
void Show(int [],int size);
void Paixu(int [],int size);
void Delsame(int [],int [],int size);

int main(){
 int a[]={2,1,3,2,4,6,10,9,8,7,6,5,4,8,8,10},b[10];
 int n=sizeof(a)/sizeof(int);
 cout<<"原序列为:";
 Show(a,n);
 cout<<"按照从小到大重新排序后的序列为:";
 Paixu(a,n);
 Show(a,n);
 cout<<"删除相同数后的序列为:";
 Delsame(a,b,n);
 Show(b,10);
 return 0;
}
void Show(int a[],int size){
 int m=size;
 int b[100];
 for (int i=0;i<m;i++)
 {
  b[i]=a[i];
  cout<<b[i]<<" ";
 }
 cout<<endl;
}
void Paixu(int a[],int size){
 int m=size;
 int k=m;
 for (k;k>1;k--)//这里循环的次数应该为数组元素个数-1;
  for(int i=0;i<m-1;i++)
   if (a[i+1]<a[i])
   {
    int temp=a[i+1];
    a[i+1]=a[i];
    a[i]=temp;
   }
}
void Delsame(int a[],int b[],int size){
 int m=size;
 int j=1;
 b[0]=a[0];
 for (int i=1;i<m;i++)
 {
  if(a[i]!=a[i-1])
  {
   b[j]=a[i];
   j++;
  }
 }
}*/
//通过建立类来完成删除工作
/*#include<iostream>
using namespace std;

class ARR{
public:
 ARR(int x[],int size){
  m=size;
  for(int i=0;i<m;i++)
   a[i]=x[i];
 }
 void Show(){
  for (int i=0;i<m;i++)
   cout<<a[i]<<" ";
  cout<<endl;
 }
 void Paixu(){
  int k=m;
  for (k;k>1;k--)//这里循环的次数应该为数组元素个数-1;
   for(int i=0;i<m-1;i++)
    if (a[i+1]<a[i])
    {
     int temp=a[i+1];
     a[i+1]=a[i];
     a[i]=temp;
    }
 }
 void Delsame(){
  int j;
  for (int i=0;i<m-1;i++)
  {
   if(a[i]==a[i+1])
   {
    for (j=i+1;j<m-1;j++)
     a[j]=a[j+1];
    m--;//删除一个元素后,元素个数减1;
    i--;//有可能出现连续多个相同的数,所以应继续判断当前的i,因为接下来i++;
   }
 }
}
private:
 int m;
 int a[100];
};
int main(){
 int a[]={2,1,3,2,4,6,10,9,8,7,6,5,4,8,8,10};
 int n=sizeof(a)/sizeof(int);
 ARR v(a,n);
 cout<<"原序列为:";
 v.Show();
 cout<<"按照从小到大重新排序后的序列为:";
 v.Paixu();
 v.Show();
 cout<<"删除相同数后的序列为:";
 v.Delsame();
 v.Show();
 return 0;
}*/

//增加程序功能,求出序列中每个数据具体的重复个数,在原结果的下一行对应输出。
//例如,修改后的程序输出结果如下所示:
//1 2 2 3 4 4 5 6 6 7 8 8 8 9 10 10
//1 2 3 4 5 6 7 8 9 10
//1 2 1 2 1 2 1 3 1 2
/*#include <iostream>
using namespace std;

int main(){
 int a[]={2,1,3,2,4,6,10,9,8,7,6,5,4,8,8,10},c[10];
 int i,j=1,n,num,q,l=0;
 n=sizeof(a)/sizeof(int);
 cout<<"原序列为:";
 for (i=0;i<n;i++)
  cout<<a[i]<<" ";
 cout<<endl;
 int k=n;
 for (k;k>1;k--)//这里循环的次数应该为数组元素个数-1;
  for(i=0;i<n-1;i++)
   if (a[i+1]<a[i])
   {
    int temp=a[i+1];
    a[i+1]=a[i];
    a[i]=temp;
   }
 cout<<"按照从小到大重新排序后的序列为:";
 for (i=0;i<n;i++)
  cout<<a[i]<<" ";
 cout<<endl;
 for (i=0,l=0;i<n-1,l<10;i+=num,l++)
 {
  num=1;
  for (q=i+1;q<n;q++)
   if (a[i]==a[q])
    num++;
  c[l]=num;
 }
 int b[10];
 b[0]=a[0];
 for (i=1;i<n;i++)
 {
  if(a[i]!=a[i-1])
  {
   b[j]=a[i];
   j++;
  }
 }
 cout<<"删除相同数后的序列为:";
 for (i=0;i<j;i++)
  cout<<b[i]<<" ";
 cout<<endl;
 cout<<"相同数字重复的次数为:";
 for(l=0;l<10;l++)
  cout<<c[l]<<" ";
 cout<<endl;
 return 0;
}*/

//讲以上数组改为指针,根据对象的具体元素个数动态开辟存储空间存放对象数据。
//增加程序功能,求出对象中每个数据具体的重复个数,同样定义一个整形指针存放每个数据的重复次数,
//在原结果的下一行对应输出。例如,修改后的程序输出结果如下所示:
//1 2 2 3 4 4 5 6 6 7 8 8 8 9 10 10
//1 2 3 4 5 6 7 8 9 10
//1 2 1 2 1 2 1 3 1 2
#include<iostream>
using namespace std;

class ARR{
public:
 ARR(int x[],int size){
  m=size;n=size;
  a=new int[m];
  c=new int[m];
  for(int i=0;i<m;i++)
   a[i]=x[i];
 }
 void Show(){
  for (int i=0;i<m;i++)
   cout<<a[i]<<" ";
  cout<<endl;
 }
 void Show1(){
  for (int i=0;i<n-1;i+=c[i])
   cout<<c[i]<<" ";
  cout<<endl;
 }
 void Paixu(){
  int k=m;
  for (k;k>1;k--)//这里循环的次数应该为数组元素个数-1;
   for(int i=0;i<m-1;i++)
    if (a[i+1]<a[i])
    {
     int temp=a[i+1];
     a[i+1]=a[i];
     a[i]=temp;
    }
 }
 void Delsame(){
  int j;
  for (int i=0;i<m-1;i++)
  {
   if(a[i]==a[i+1])
   {
    for (j=i+1;j<m-1;j++)
     a[j]=a[j+1];
    m--;//删除一个元素后,元素个数减1;
    i--;//有可能出现连续多个相同的数,所以应继续判断当前的i,因为接下来i++;
   }
  }
 }
 void Repete(){
  int num;
  for (int i=0;i<m-1;i+=num)
  {
   num=1;
   for (int q=i+1;q<m;q++)
    if (a[i]==a[q])
     num++;
    c[i]=num;
  }
}
private:
 int m,n;
 int *a,*c;
};
int main(){
 int a[]={2,1,3,2,4,6,10,9,8,7,6,5,4,8,8,10};
 int n=sizeof(a)/sizeof(int);
 ARR *p=new ARR(a,n);
 cout<<"原序列为:";
 p->Show();
 cout<<"按照从小到大重新排序后的序列为:";
 p->Paixu();
 p->Show();
 p->Repete();
 cout<<"删除相同数后的序列为:";
 p->Delsame();
 p->Show();
 cout<<"相同数字重复的次数为:";
 p->Show1();
 delete p;
 return 0;
}