【问题标题】:How this program prints the map of India? [duplicate]这个程序如何打印印度地图? [复制]
【发布时间】:2013-03-02 07:44:25
【问题描述】:

需要说明它是如何工作的。

#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;
}

自己尝试一下,如果你知道这个程序是如何打印地图的,请解释一下。

【问题讨论】:

  • 哦等等,这是个骗子!

标签: c algorithm


【解决方案1】:

编辑:抱歉,没看到骗子……


去掉各种不可读、不必要和未使用的代码等各种混淆后,代码等价于:

    #include "stdio.h"

int main()
{
    int curr_char, b, c;

    const char *data = "\
    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!";

    for (b = 0, c = 10; curr_char = data[b]; ) {
        b++;
        for(; curr_char-- > 64 ; ) {
            putchar(++c == 'Z' ? c = c / 9 : 33 ^ b & 1);
        }
    }

    return 0;
}

基本上,程序将地图数据存储在字符串中(每行对应 4 个字符),逐个字符地遍历字符串,“解码”它(使用一些我没有费心进行逆向工程的数学),然后打印空格或“!”在行尾标记或换行。

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2016-08-15
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多