0

それがどのように機能するかについての説明が必要です。

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

自分で試してみてください。このプログラムがその地図をどのように印刷するか知っているなら、説明してください。

4

1 に答える 1

0

編集:申し訳ありませんが、重複を見ませんでした...


さまざまな読みやすさ、不要な未使用のコード、およびその他の種類の難読化を削除した後、コードは次のようになります。

    #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文字に対応します)、文字列を1文字ずつ調べ、「デコード」して(リバースエンジニアリングに煩わ​​されなかったいくつかの数学を使用して)、スペースを出力します。または「!」行末にマークまたは改行。

于 2013-03-02T08:12:28.927 に答える