编码问题?帮忙看看::鄙人较愚望高人指点呐!!!
设有一个整形数组 A[0..N-1];存放的元素为 0~N-1 (1<N<=10)之间的整数,且 A[i]≠A[j](i≠j)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下:A[0]编码为0;
A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数 (i=1,2,…,N-1)
例如上面数组 A的编码为:B=(0,0,0,3,1,2)
若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。
输入:
推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组)
数组个数
数组或数组编码元素
输出:
数组编码、或数组本身(元素之间以空格分隔)
例子1输入 1 输出 例子2输入2 输出
6 6
4 3 0 5 1 2 0 0 0 3 1 2 0 0 0 3 1 2 4 3 0 5 1 2
main
{int m,n,i,j,count=0,c[20],a[20]; int static b[20]={0};
scanf("%d\n%d",&m,&n);
for(i=0;i<n;i++)
scanf("%d",a[i]);
for(i=0;i<n;i++)
b[i]=i;
if(m==1)
{
for(i=0;i<2*n-1;i+=2)
for(j=i+2;j<2*n-1;j+=2)
{if(a[i]>a[j])
b[i]++;}
for(i=0;i<2*n-1;i++)
printf("%d",b[i]);
}
if(m==2)
{
b[a[n-1]]=10; c[n-1]=a[n-1];
for(i=n-2;i=n-2;i--)
{ for(j=0;j<n;j++)
if(b[j]>=0&&b[j]<=9)
{ count++;
if(count==a[n-2])
{c[n-2]=b[j]; b[j]=10;}
else continue;
}
n=n-1;
}
}
for(i=0;i<n;i++) printf("%d",c[i]);
}