藍橋杯練習系統 基礎練習: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:一個成長中的程序猿,感謝大家的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章