题目大意:题目给出x1,x2,x3,···xn的顺序,再给出按这样建树的结果,最后给出VVAs,求它的值。
解题思路:例如x1如果是1,就说明往右走,0就是往左走。这样的话就不需要建树,如果xi是1的话,就 + pow(2,xi的高度 - 1);0就不需要处理。
#include<stdio.h>
#include<string.h>
#include<math.h>
const int N = 7;
const int M = 1000;
int n, m, t = 0;
char s[M], tem[N], order[N][2], ans[M];
int main() {
while(scanf("%d", &n) && n) {
t++;
memset(order, 0, sizeof(order));
memset(s, 0, sizeof(s));
memset(ans, 0, sizeof(ans));
int i, j, k;
char ch;
for(i = 0; i < n; i++)
scanf("%s", &order[i]);
scanf("%s", &s);
scanf("%d", &m);
printf("S-Tree #%d:\n", t);
for(k = 0; k < m; k++) {
scanf("%s", &tem);
int a = -1;
for(i = 0; i < strlen(tem); i++)
if(tem[i] == '1') {
for(j = 0; j < n; j++)
if(order[j][1] - '0' == i + 1)
break;
j = n - 1 - j;
a += (int)pow(2, j);
}
a++;
ans[k] = s[a];
}
for(i = 0; i < m; i++)
printf("%c", ans[i]);
printf("\n\n");
}
return 0;
}