分析:根据样例得下面每有二个,则往上输出一个,以此类推,递推
如:下面为
10001011
先判断b【1】【1】
在判断b【1】【2】
此时【2】已是偶数,给b【2】【1】赋值(第一个数是在原有层数+1)(第二个数是较大的数除以2)
因为b【2】【i】的本行数的个数序号为奇数,所以继续
输出:设为0,1,2,根据不同情况输出
注意:先判断是否是偶数,如果是赋值输出,不是则继续执行最底下(1)的增加次数,(不是else,因为不管是不是往上加了1,有多个偶数,但只要不超过范围就继续执行底层加)
#include<bits/stdc++.h>
using namespace std;
int s=1;
int n,b[20][20000];
void fl(int l,int r){
if(b[l][r]==1) {
cout<<"I";
}
else if(b[l][r]==0){
cout<<"B";
}
else if(b[l][r]==2){
cout<<"F";
}
if(r%2==0){
if(b[l][r]==b[l][r-1]) b[l+1][r/2]=b[l][r];
else b[l+1][r/2]=2;
fl(l+1,r/2);
}
if(l==1&&r<s){
fl(l,r+1);
}
}
int main(){
char a;
cin>>n;
for(int i=1;i<=n;i++){
s=s*2;
}
for(int i=1;i<=s;i++){
cin>>a;
b[1][i]=a-'0';
}
fl(1,1);
}