UVA712

来源:互联网 发布:旭辉研彩软件在哪下载 编辑:程序博客网 时间:2024/05/23 15:38

题目的意思是给一棵完全二叉树,从根节点开始,碰到0往左,碰到1往右。

深度不大于8.第一行输入是深度。

除了叶子节点,其他处在每一水平线上的节点值都是一样的,并且用x1 ,x2,x3,x4......等来代替,第二行的输入就给出顺序。。

然后第三行的输入是从根节点到叶子节点的次数。

接下去是每一次x1,x2,x3,x4....的值是多少。(虽然每一层是x1,x2等等中的哪一个不是顺序的,但输入是顺序的,x1,x2,x3,所以要把值对上去。)。。因为每一次这些值不同,所以最终落到的位置也不同,就是要求这么多次,每一次所到的节点组成的串,输出。


这题我并没有建树,而是做了一个二进制计算,假如深度为3.。那000就是第一个 001就是第二个。刚好对上了01二进制所表示的数的大小。。


AC代码:


#include<iostream>#include<string>#include<stdio.h>#include<cmath>using namespace std;int main () {int t;int count;int flag[8];char dep[8];char leaf[256];char ans[256];int res = 0;int cas = 0;while (scanf("%d",&t) && t) {getchar();for (int i = 0; i < t ;i++) {getchar();scanf("%d",&flag[i]);getchar();}for (int i = 0 ; i < pow(2,t) ;i++) {scanf("%c",&leaf[i]);}scanf("%d",&count);getchar();for (int i = 0; i < count ;i++) {for (int j = 0; j < t ;j++) {scanf ("%c",&dep[j]);}getchar();for (int k = t - 1,l = 0 ; k >= 0;k--,l++ ) {res += (dep[flag[l] - 1] - 48) * pow (2,k);}ans[i] = leaf[res]; ans[i + 1] = '\0';res = 0;}printf("S-Tree #%d:\n%s\n\n",++cas,ans);}return 0;}


0 0
原创粉丝点击