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 }