简单模拟即可,注意xi输入的顺序,用一个数组记录从0~n依次是x多少。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int kcase = 1;
while(true){
int n = scan.nextInt();
if(n==0)break;
int[] index = new int[n];//记录xi
int all = (int)Math.pow(2,n+1);
int[] G = new int[all];//树
int cnt = 0;
for(int i=0;i<n;i++){
String str = scan.next();
index[cnt++] = str.charAt(1)-'0'-1;
}
String le = scan.next();
cnt = (int)Math.pow(2, n);
for(int i=0;i<le.length();i++){
G[cnt++] = le.charAt(i)-'0';
}
int m = scan.nextInt();
String ans = "";
for(int i=0;i<m;i++){
String str = scan.next();
cnt = 1;
for(int j=0;j<n;j++){
if(str.charAt(index[j])=='0'){//根据记录的index数组x的输入顺序,取出str相应位置的值
cnt = cnt*2;
}else{
cnt = cnt*2+1;
}
}
ans+=G[cnt];
}
System.out.printf("S-Tree #%d:\n",kcase++);
System.out.println(ans);
System.out.println();
}
}
}
本文介绍了一个简单的模拟算法案例,通过数组记录输入顺序并利用二进制数映射进行快速查找。文章展示了完整的Java代码实现过程,包括输入处理、数据结构定义及结果输出等关键步骤。

474

被折叠的 条评论
为什么被折叠?



