|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
设有一个数组 int A[N];数组中存放的元素为0~N−1之间的整数,且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)
输入描述
每个测试文件只包含一组测试数据,每组输入包含三行。
第一行输入整数N
;
第二行输入有两种可能:
例如:
A=(4,3,0,5,1,2)
或
B=(0,0,0,3,1,2)
其中输入中的逗号和括号都是英文状态下的。
输出描述
当输入的是A=(...),则输出其编码。
当输入的是B=(...),则输出A中的原数据。
输出数据的格式和输入数据的格式是一样的。 #include<stdio.h>
int a[10000],b[1000],flag[1000]={0};
int main()
{
int n,i,j,k;
char ch;
scanf("%d",&n);
getchar();
scanf("%c",&ch);
scanf("=(");
scanf("%d",&a[0]);
for(i=1;i<n;i++)
{
scanf(",%d",&a[i]);
a[i]++;
}
scanf(")");
if(ch=='A')
{
for(i=1;i<n;i++)
{
int num=0;
for(j=0;j<i;j++)
{
if(a[i]>a[j])
{
num++;
}
}
b[i]=num;
}
printf("B=(%d",b[0]);
for(i=1;i<n;i++)
{
printf(",%d",b[i]);
}
printf(")");
}
else
{
for(i=n-1;i>=0;i--)
{
j=0,k=0;
do
{
if(flag[k]==0)
{
j++;
}
k++;
}while(j<a[i]);
flag[--k]=1;
b[i]=k;
}
printf("A=(%d",b[0]);
for(i=1;i<n;i++)
{
printf(",%d",b[i]);
}
printf(")");
}
return 0;
}
别乱改字母,B解码成A为啥不对 |
|