基础题。
#include <iostream>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 55;
int P[MAXN]; //排列
int I[MAXN]; //反转
int main()
{
int N;
while (cin >> N)
{
if (N == 0)
break;
char c;
cin >> c;
if (c == 'P') //根据排列求反转
{
for (int i = 0; i < N; i++) //读入排列
{
cin >> P[i];
}
for (int i = 1; i <= N; i++)
{
int total = 0; //i之前大于i的数的个数
for (int j = 0; j < N; j++)
{
if (P[j] == i)
break;
else if (P[j] > i)
++total;
}
I[i] = total; //填入相应位置
}
for (int i = 1; i < N; i++) //输出
cout << I[i] << " ";
cout << I[N] << endl;
}
else //根据反转求排列
{
for (int i = 1; i <= N; i++) //读入反转,初始化排列
{
cin >> I[i];
P[i] = INF;
}
for (int i = 1; i <= N; i++)
{
int total = 0; //P[j]之前大于i的数的个数
for (int j = 1; j <= N; j++)
{
if (P[j] > i)
{
if (total == I[i])
{
P[j] = i; //填入相应位置
break;
}
else
++total;
}
}
}
for (int i = 1; i < N; i++) //输出
cout << P[i] << " ";
cout << P[N] << endl;
}
}
return 0;
}
继续加油。
372

被折叠的 条评论
为什么被折叠?



