题目传送门https://www.luogu.com.cn/problem/P1087
这道题是一道典型的递归问题,递归函数递归部分如下:
int mid = (l+r)/2;
if(l != r){
w(l,mid);
w(mid+1,r);
}
l是左,r是右,当左右不相同时,二分,从左到中间,从中间+1到右边。
int a2 = 0,b = 0;
for(int i = l;i <= r;i++){
if(a[i] == '0'){
a2++;
}else{
b++;
}
}
a2是0的个数,b是1的个数。
按照题目描述如果只有0输出B,如果只有1输出I(这是大写的i有的像小写的L所以写个提示),如果有1有0输出F。
if(a2&&b){
cout << "F";
}else if(a2){
cout << "B";
}else{
cout << "I";
}
最后注意题目说的长度是2^n的字符串!
完整代码:
#include <bits/stdc++.h>
using namespace std;
char a[1250];
void w(int l,int r){
int mid = (l+r)/2;
if(l != r){
w(l,mid);
w(mid+1,r);
}
int a2 = 0,b = 0;
for(int i = l;i <= r;i++){
if(a[i] == '0'){
a2++;
}else{
b++;
}
}
if(a2&&b){
cout << "F";
}else if(a2){
cout << "B";
}else{
cout << "I";
}
}
int main(){
int n,h;
cin >> n;
h = pow(2,n);
for(int i = 1;i <= h;++i){
cin >> a[i];
}
w(1,pow(2,n));
return 0;
}
希望对你有帮助,如果可以能点一个免费的赞+关注吗?
谢谢!