印刷“成功”的最短路线

时间:2010-08-07 14:13:13

标签: c

我一直在使用spoj尝试此问题SUCCESS,但我无法获得该问题的最佳解决方案

我试过

int main(){return !puts("Success");}

但需要45个字符。有什么替代建议可以解决问题吗?人们也用24个字符解决了它。

9 个答案:

答案 0 :(得分:6)

main(){puts("Success");}

24个字符。

  • 在C中,如果省略返回类型,则隐式int
  • 如果main()不包含return语句,则main的返回值为0

<强>更新 好吧,在每个版本的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)

26个字符

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