这个解题思路抛出了位的概念,有时候位操作或用位来记录标记是一件很方便的事情

通过12个二进制来确定位置:如第一行可以表示为0000 0110 0000,转换为十六进制就是0x060。
一共有6行,所以写一个有6个元素的一维数组。
所以进行6次循环,每次循环结束就输入一个换行符。
在6次循环中的每一次都嵌套一个循环12次的循环(经过数个数,确定最多的一行只有12个元素),用来输入这一行的每个字符。
这个时候那12个二进制就有用了,将数据右移j位,如i=0,j=0的时候,表示第一行第一个,在二进制的12位中,表示 0000 0110 0000的最右边的第一个——0。
当j=5(说明现是第6次循环了,前面5个已经输出了),右移5位,也就是j位,0000 0110 0000变成0000 0000 0001,表示第6个元素是*;
与上(&)0x001也就是0000 0000 0001 &0000 0000 0001,可以只保留最后的位数,不然其他位有数据的可能会造成逻辑错误;
此时只要判断最后一位为1还是为0即可判断是输出空格还是*就可以输出第6位的字符串了。



#include <stdio.h>

int main() {
    int tab[6] = {0x060, 0x060, 0xFFF, 0xFFF, 0x090, 0x090};
    for (int i = 0; i <= 5; i++) {
        for (int j = 0; j <= 11; j++) {
            if (((tab[i] >> j) & 0x01) == 0x01)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}