题目意思 如果输入的是p类串,则输出i类串;如果输出的是i类,则输出p类串。。。
p转i:
寻找在p串中在j左边的比j大的数的个数,i串中的第j个数填为该数。。
i转p:
从尾部开始,若第j个数的值为x,则说明在p串中j的左边有x个数大于j,通过从后到前一个个插入,即可得到p串。。
例如:
2 3 6 4 0 2 2 1 0
1、9 0 0 0 0 0 0 0 0
2、第8位数为1,则说明其左边有一个比它大,所以要排在9后面,即
9 8 0 0 0 0 0 0 0
3、第7为数为2,则
9 8 7 0 0 0 0 0 0
4、第6位为2,则
9 8 6 7 0 0 0 0 0
.。。。。。。。
#include<stdio.h>
int main()
{
int n,a[55],i,j,s[55],num;
char x;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%*c%c",&x);
for(i=0;i<n;i++)scanf("%d",&a[i]);
if(x=='P')
{
for(i=1;i<=n;i++)
{
for(j=n-1;j>=0;j--)
if(i==a[j])break;
num=0;
for(;j>=0;j--)
if(a[j]>i)num++;
s[i]=num;
}
}
else
if(x=='I')
{
s[1]=n;
for(i=n-2;i>=0;i--)
{
for(j=n-1;j>a[i];j--)s[j+1]=s[j];
s[a[i]+1]=i+1;
}
}
printf("%d",s[1]);
for(i=2;i<=n;i++)printf(" %d",s[i]);
printf("\n");
}
}