蓝桥杯练习系统 基础练习:BASIC-2 01字串

题目信息

问题描述

 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。

输入格式

 本试题没有输入。

输出格式

 输出32行,按从小到大的顺序每行一个长度为5的01串。

样例输出

00000
00001
00010
00011
<以下部分省略>

解题思路

主要考察

 本题给出的考察关键字是:循环

解题思路

 这个问题有好几种解法:我的解法是:可以理解为让我们输出从0-31的二进制形式,规定每位二进制数的长度为5位,不足五位则在前面补0。我是先将每一位数利用栈转换成二进制,然后再补零输出。还有一种更快的方法是直接使用C++中的二进制函数库<bitset>这个方法是经过搜索之后知道的。直接从0-31输出每一个数的5位二进制形式的数。
下面是C++api中<bitset>的用法(具体的用法可以查看C++ api):
bitset的详细用法
bitset的用法
还有一种解法是使用递归来解,具体的解题方式可以看这位大佬的博客:蓝桥杯-01字串

方法1 解题代码

#include<iostream>
#include<string>
#include<stack>
using namespace std;

int main(){
	char s[2] = {'0','1'};
	for(int i=0;i<32;i++){
		string bin;          //用来存放求出来的二进制数 
		stack<char> bin_num;  
		int j = i;
		if(j == 0){
			bin_num.push('0');
		}else{
			while(j){
				bin_num.push(s[j%2]);
				j /= 2;
			}
		}
		while(!bin_num.empty()){
			bin += bin_num.top();
			bin_num.pop(); 
		}
		int len = bin.length();
		if(len == 1){
			bin = "0000" + bin;
		}else if(len == 2){
			bin = "000" + bin;
		}else if(len == 3){
			bin = "00" + bin;
		}else if(len == 4){
			bin = "0" + bin;
		}
		cout<<bin<<endl;
	}
	
	return 0;
	
}

方法2解题代码

#include<iostream>
#include<bitset>
using namespace std;

int main(){
	for(int i=0;i<32;i++){
		cout<<bitset<5>(i)<<endl;
	}
	
	return 0;
}

方法3解题代码

代码参考地址:蓝桥杯-01字串

#include<iostream>
using namespace std;
char a[6];

void dfs(int i){
    if(i==5){
        cout<<a<<endl;
        return;
    }
    a[i]='0';
    dfs(i+1);
    a[i]='1';
    dfs(i+1);
}

int main(){
    a[5]=0;
    dfs(0);
    
    return 0;
}

 以上就是对于本题的解题思路了。如果你觉得我的文章对你有用请点个赞支持一下吧,喜欢我写的文章那么请点个关注再走鸭。如果此文章有错误或者有不同的见解欢迎评论或者私信。
可爱
我是ACfun:一个成长中的程序猿,感谢大家的支持。

发布了94 篇原创文章 · 获赞 334 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41575507/article/details/105778130