题意
给一棵满二叉树,每一层有一个变量,每个变量都有一个值:0或1。0向左走,1向右走。求到达叶子的值
思路
不用建树,只要模拟左走右走就可以了
总结
建树应该也能做,但是目前对建树有点生疏,不是很会。
在推左走右走的公式时能快一点最好,明明很容易,却找共性找了很久,而且DEBUG了很久,就是因为在存叶子那行数值的时候存的字符型,而不是整型,忘记 - ‘0’,时间都浪费在这里了。
这次一次就过了哦,继续努力,加油。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <stack> 6 using namespace std; 7 const int maxn = 10; 8 int n, m, kase = 0; 9 10 int main() 11 { 12 // freopen("in.txt","r",stdin); 13 while(cin >> n && n){ 14 cout << "S-Tree #" << ++kase << ":" << endl; 15 int node[maxn]; 16 getchar(); 17 string s, ter, val; 18 getline(cin,s); 19 int len = s.size(); 20 int num = 0; 21 for(int i = 0; i < len; i++) 22 if(isdigit(s[i])) node[num++] = s[i]-‘0‘; 23 cin >> ter >> m; 24 getchar(); 25 for(int i = 0; i < m; i++){ 26 cin >> val; 27 int cnt = 1; 28 for(int j = 0; j < n; j++){ //模拟 29 if(val[node[j]-1]-‘0‘ == 1) cnt *= 2; 30 else cnt = cnt*2-1; 31 } 32 cout << ter[cnt-1]; 33 } 34 cout << endl; 35 cout << endl; 36 } 37 return 0; 38 }
时间: 2024-11-04 04:02:35