标签: 未分类
设有一个数组 A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为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)
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
void fixA(int num[], int len);
void fixB(int num[], int len);
int main(int argc, const char * argv[]) {
int n;
cin >>n;
string str;
cin >>str;
int num[20]{};
int i = 3, len = 0;
int t = 0;
while (i < str.size()) {
if (isdigit(str[i])) {
t = t*10 + (str[i]-'0');
}
if (str[i] == ',' || str[i] == ')') {
num[len++] = t;
t = 0;
}
i++;
}
if (str.front() == 'A') {
fixA(num, len);
} else {
fixB(num, len);
}
return 0;
}
void fixB(int num[], int len) {
int res[20]{};
bool visit[20]{};
for (int i = len-1; i >= 0; i--) {// 5 4 3 2 1 0
int cnt = 0;
for (int k = 0; k < len; k++) {
if (cnt == num[i] && visit[k] == false) {
res[i] = k;
visit[k] = true;
break;
}
if (visit[k] == false) {
cnt++;
}
}
}
string s = "A=(";
ABHandle(s, res, len);
}
B 转 A