Self Print in C++

来源:互联网 发布:2016年淘宝开店押金 编辑:程序博客网 时间:2024/05/10 10:29
所谓的Self Print(自打印程序),就是指代码编译之后运行输出的结果和原来的代码一样。
换言之,假设把编译-运行-输出作为一个算子F,代码作为自变量s的话,Self Print 就是要寻找s,使得 F(s)=s

下面的程序要实现的是另外一种形式的Self Print,F(F(F(F(s))))=s

#include <cstdio>

int main()
{
    int Type=0;
    char *s1="#include <cstdio>/nint main()/n{/n/tint Type=1;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s2="#include <cstdio>/nint main()/n{/n/tint Type=2;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s3="#include <cstdio>/nint main()/n{/n/tint Type=3;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s4="#include <cstdio>/nint main()/n{/n/tint Type=4;/n/tchar *s1=%c%s%c;/n/tchar *s2=%c%s%c;/n/tchar *s3=%c%s%c;/n/tchar *s4=%c%s%c;/n/tchar *s[]={s1,s2,s3,s4};/n/tprintf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);/n}";
    char *s[]={s1,s2,s3,s4};
    printf(s[Type],34,s1,34,34,s2,34,34,s3,34,34,s4,34);
}

发挥你的想象,看看你能实现出多少更pp,更有趣的Self Print程序呢?
原创粉丝点击