//删除序列中相同的数
/*#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;
}