作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码打印印度 map 。它是如何工作的?
#include <stdio.h>
main()
{
int a,b,c;
int count = 1;
for (b=c=10;a="- FIGURE?, UMKC,XYZHello Folks,\
TFy!QJu ROo TNn(ROo)SLq SLq ULo+\
UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\
NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\
HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\
T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\
Hq!WFs XDt!" [b+++21]; )
for(; a-- > 64 ; )
putchar ( ++c=='Z' ? c = c/ 9:33^b&1);
return 0;
}
最佳答案
长字符串只是转换为 ASCII 的二进制序列。第一个 for
语句使 b
从 10 开始,字符串后面的 [b+++21]
产生 31。作为数组,偏移量 31 是字符串中“真实”数据的开始(您提供的代码示例中的第二行)。代码的其余部分只是循环遍历位序列,将 1 和 0 转换为 ! 和空格,并一次打印一个字符。
较少混淆的版本:
#include "stdio.h"
int main (void) {
int a=10, b=0, c=10;
char* bits ="TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^NBELPeHBFHT}TnALVlBLOFAkHFOuFETpHCStHAUFAgcEAelclcn^r^r\\tZvYxXyT|S~Pn SPm SOn TNn ULo0ULo#ULo-WHq!WFs XDt!";
a = bits[b];
while (a != 0) {
a = bits[b];
b++;
while (a > 64) {
a--;
if (++c == 'Z') {
c /= 9;
putchar(c);
} else {
putchar(33 ^ (b & 0x01));
}
}
}
return 0;
}
strange
巧妙的部分在于 putchar
语句中。获取第一个 putchar
。 ASCII 'Z'
是十进制的 90,因此 90/9 = 10 这是一个换行符。在第二个中,十进制 33 是 '!'
的 ASCII。切换 33 的低位会得到 32,这是表示空格的 ASCII。如果 b
是奇数,这会导致打印 !
;如果 b
是偶数,则打印空格。其余的代码只是简单地让“指针”a
遍历字符串。
关于c - 这段代码如何生成印度 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853250/
我是一名优秀的程序员,十分优秀!