这个解题思路抛出了位的概念,有时候位操作或用位来记录标记是一件很方便的事情
通过12个二进制来确定位置:如第一行可以表示为0000 0110 0000,转换为十六进制就是0x060。
一共有6行,所以写一个有6个元素的一维数组。
所以进行6次循环,每次循环结束就输入一个换行符。
在6次循环中的每一次都嵌套一个循环12次的循环(经过数个数,确定最多的一行只有12个元素),用来输入这一行的每个字符。
当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; }