我一直在使用spoj尝试此问题SUCCESS,但我无法获得该问题的最佳解决方案
我试过
int main(){return !puts("Success");}
但需要45个字符。有什么替代建议可以解决问题吗?人们也用24个字符解决了它。
答案 0 :(得分:6)
main(){puts("Success");}
24个字符。
int
<强>更新强> 好吧,在每个版本的C 中都可以省略main 的返回,但只有C99将返回值定义为0(如果省略)。 C99也不允许隐式声明。
<强>更新强> 我有一个微弱的记忆,有人为了类似的问题解决了这个问题:他/她以某种方式编码了文件名中的大部分程序,以便可以在程序代码中使用__FILE__宏来注入代码。我不知道这是否属于OP竞赛的规则,但无论如何它应该是一个有趣的练习。
答案 1 :(得分:5)
问题陈述非常模糊,看起来需要使用gcc -ansi
进行编译并在运行时返回0。我能想出来的最好的是:
main(){exit(!puts("Success"));}
计算最终换行符的32个字符(你可以省略吗?)。将int
添加到main()
会将其设置为36个字符。
这可能是不允许的:
/* Filename: Success */
main(){exit(!puts(__FILE__));}
使用gcc -x c -ansi Success
进行编译,它会为您节省另一个角色!
这个角色解决方案怎么样:
C
只需使用gcc -ansi -DC='int main(void){puts("Success");return 0;}'
进行编译。
答案 2 :(得分:5)
main(){brk(printf("%m"));}
答案 3 :(得分:3)
<强> 26 强>
main(){j0(!printf("%m"));}
答案 4 :(得分:1)
int main(){perror(0);}
答案 5 :(得分:1)
30个字符:
main(){exit(!printf("%m\n"));}
29个字符:
main(){exit(!printf("%m
"));}
答案 6 :(得分:0)
这是一个简单的24个字符......
main(){puts("Success");}
int
的{{1}}返回类型和main()
语句都不是必需的......
答案 7 :(得分:0)
使其变小依赖于做不可移植或严格有效的事情C.在执行规则松散的POSIX环境中,你可以做(18个字符):
main(){perror(0);}
但除非int
和指针具有相同的大小,否则这将会破坏。添加1个额外字符并利用实际POSIX系统具有long
和指针类型相同大小的事实:
main(){perror(0L);}
我认为你不能让它变小。
答案 8 :(得分:0)
我用0(零)字符:
cat src.c
(empty)
生成的可执行文件:
rbo@deneb ~
$ ./src
SUCCESS
和命令行:
rbo@deneb ~
$ echo x>>src.c && gcc -Dx="int main(){return puts(\"SUCCESS\");}" -o src src.c
但是这当然仍然会创建一个带有on字符的源文件,正如Pedro在下面指出的那样。没有任何源文件,命令将是(在Unix环境中):
rbo@deneb ~
echo 'int main(){return puts("SUCCESS");}'|gcc -ansi -o src -xc -
甚至比上述更短。在原始描述中,没有限制说明如何解决它,但OP在后面的注释中添加他不能更改命令行。如果这是真的,那么不是 Code Golf ; - )
此致
RBO