uva 712 - S-Trees

题目有点长,但是思路很简单,找出每次的路径2进制序列然后在叶子里找到对应的0或1值即可。

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int orders[10];
char leaves[200];
int num=1;
int main() {
	int n;
	char str[10];
	while (scanf("%d", &n) != EOF) {
		if (n == 0)
			break;
		printf("S-Tree #%d:\n",num++);
		int i;
		for (i = 0; i < n; i++) {
			scanf("%s", str);
			orders[i] = atoi(str + 1);
		}
		scanf("%s", leaves);
		int m;
		scanf("%d", &m);
		char vva[10];
		for (i = 0; i < m; i++) {
			scanf("%s", vva);
			int j;
			char binary[10];
			for (j = 0; j < n; j++) {
				binary[j] = vva[orders[j] - 1];
			}
			binary[n] = 0;

			int idx = 0;
			int k;
			for (k = 0; k < n; k++) {
				if (binary[k] - '0')
					idx += pow(2, n - 1 - k);
			}
			printf("%d", leaves[idx]-'0');

			if (i == m - 1)
				printf("\n\n");

		}

	}

	return 0;
}

 

你可能感兴趣的:(tree)