|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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为啥不对 |
|