UVa 712 S树

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=653

题意:给出满二叉树的叶子节点的值,给出路径并输出叶子节点的值

因为是满二叉树,所以就运用满二叉树的性质,往左走时L=2*L,往右走时就是L=2*L+1。这道题里第二行输入的东西完全没用,所以可以直接用个字符串来吃掉它。另外要注意的就是得把输出值先保存下来,最后一起输出。

 1 #include<iostream>  
 2 #include<cstring>  
 3 #include<string>
 4 #include<cmath>  
 5 using namespace std;
 6 
 7 int n, m, pos[1<<10], x, s[1<<10];
 8 
 9 
10 int main()
11 {
12     int kase = 1;
13     while (cin >> n && n)
14     {
15         string str;                
16         getchar();                            //吃掉回车
17         getline(cin, str);                   //吃掉第二行
18         for (int i = 1; i <= pow(2, n); i++)
19             scanf("%1d", &pos[i]);
20         cin >> m;
21         int t = 1;
22         for (int i = 1; i <= m; i++)
23         {
24             int l = 1;
25             for (int j = 1; j <= n; j++)
26             {
27                 scanf("%1d", &x);
28                 l = l * 2 + x;
29             }
30             l = l - pow(2, n) + 1;
31             s[t++] = pos[l];
32         }
33         printf("S-Tree #%d:
", kase++);
34         for (int i = 1; i <= m; i++)
35             cout << s[i];
36         cout << endl << endl;
37     }
38     return 0;
39 }
原文地址:https://www.cnblogs.com/zyb993963526/p/6240125.html