首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

藍橋杯基礎練習:生成所有5位01字串

     編輯:關於C語言

藍橋杯基礎練習:生成所有5位01字串

這道經典的藍橋杯基礎練習題目要求我們輸出所有長度為5的01字串,按從小到大的順序排列。對於5位二進制數,每一位只能是0或1,總共有2^5 = 32種可能的組合。前幾個依序為:

00000
00001
00010
00011
00100
...

題目沒有輸入,只需直接輸出這32行字串。這其實就是模擬二進制計數器從0遞增到31的過程。

解題思路

最直觀的方法是使用一個長度為5的整型數組模擬二進制加法。從最低位(數組索引0)開始加1,若該位大於等於2則進位:將該位取模2,進位值加到下一位,以此類推直到無進位為止。每次完成加法後,從高位到低位輸出數組內容即可得到一個01字串。

C語言實現代碼

#include <stdio.h>

int main(void) {
    int a[5] = {0};  // 初始化為00000
    int temp, times, i;
    
    printf("00000\n");  // 直接輸出第一個
    
    for (times = 1; times <= 31; times++) {
        i = 0;
        a[i] += 1;  // 最低位加1
        
        // 處理進位
        while (a[i] >= 2) {
            temp = a[i] / 2;
            a[i] = a[i] % 2;
            i++;
            a[i] = a[i] + temp;
        }
        
        // 從高位到低位輸出
        for (i = 4; i >= 0; i--) {
            printf("%d", a[i]);
        }
        printf("\n");
    }
    return 0;
}

代碼解析

  • 數組a[5]對應二進制的5位,索引0為最低位(最右邊),索引4為最高位(最左邊)
  • 外層循環執行31次,配合初始輸出的"00000",共產生32個字串
  • while循環處理連續進位情況,如00011加1變成00100
  • 輸出時逆序遍歷數組,符合人類閱讀習慣(高位在左)

執行結果

程序將按順序輸出:

00000
00001
00010
00011
00100
00101
00110
00111
01000
...
11111

這種模擬二進制加法的方法不僅解決了本題,也為理解計算機底層算術運算提供了直觀示例。同樣的思想可以擴展到任意位數的二進制生成,或進一步應用於大數加法運算中。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved