有些非负整数文件中存在许多连续相等的整数段。设计程序将这种整数原文件
按以下规则压缩到另一个压缩文件中:
.一个连续相等的整数段,如有C(C>1)个连续相等整数, 在压缩文件中存入C
和这个整数。
.一个不连续相等的整数段,如有C(C≥1)个整数, 其中每个整数都与其相邻
的整数不等,在压缩文件中存入-C和这C个整数。
例如,原文件为
2 2 2 4 4 4 8 3 8 1 1 1 1 2 1
则它的压缩文件为
3 2 3 4 -3 8 3 8 4 1 -2 2 1
===================================================================================
#include<iostream>
#include<cstdlib>
using namespace std;
int* make(int *a,int &n)
{
int i=0,j=-1,k=0;
int *b=(int*)malloc(2*n*sizeof(int));
while(n-i)
{
if(a[i]==a[i+1])
{
while(a[i]==a[i+1])
{
i++;
if(i==n-1)break;
}
b[k++]=i-j;
b[k++]=a[i];
j=i;i++;
}
else
{
while(a[i]!=a[i+1])
{
i++;
if(i==n-1)
{
i++;
break;
}
}
b[k++]=j-i+1;
while(++j<i)b[k++]=a[j];
j--;
}
}
b=(int*)realloc(b,k*sizeof(int));
n=k;
return b;
}
int main()
{
int a[]={1,2,1,2,2,2,4,4,4,8,3,8,1,1,1,1,1,1,2,2,2,5,6,9,9,9,2,1},len=sizeof(a)/sizeof(int);
int *b=make(a,len);
for(int i=0;i<len;i++)cout<<b[i]<<" ";
cout<<endl;
system("PAUSE");
return 0;
}