I am LAZY bones ? all linux

C 语言 IQ 题..

http://linuxfire.com.cn/~alecs/fun/xiaoming.txt

小明初学 C 语言,写了个程序,想打印 99 个 ‘#’. 程序如下:

int i, n=99; main() { for(i=0; i<n ; i--) { printf("#"); } }

但是这个程序是错的.

Question 1: 请大家帮他改正, 但只允许 1) 删除一个字符 or 2) 增加一个字符 or 3) 改变一个字符
Question 2: 同样的限制条件, 使得只打印一个 ‘#’
Qeustion 3: 同样的限制条件, 打印 100 个 ‘#’

这个题目,粗看无聊,仔细想想还挺有意思的,我归纳了下,有这些答案.
下面要帖答案了,要自己思考下的先别往下看了.

Question 1 的几个解(99个#):

int i, n=99; main() { for(i=0; i+n; i--) { printf("#"); } }
int i, n=99; main() { for(i=0; -i<n; i--) { printf("#"); } }
int i, n=99; main() { for(i=0; i<n; n--) { printf("#"); } }

Question 2 的几个解(1个#):

int *i, n=99; main() { for(i=0; i<n; i--) { printf("#"); } }
int i, *n=99; main() { for(i=0; i<n; i--) { printf("#"); } }
int i, n=99; main() { for(i=0; i<n; i--); { printf("#"); } } //此解运行较慢

Question 3 的几个解(100个#):

int i, n=99; main() { for(i=0; ~i<n; i--) { printf("#"); } }

你还有其他答案吗?
球猫还写了个暴力的脚本解决这个问题,也蛮有意思的.

汗了…WP的blog,怎么两个-号,会变成一个呢?半角的引号也变了,唉…

最后修改时间: 2009年11月10日 15:35

本文章发表于: 2008年07月04日 12:27 | 所属分类:编程相关, 趣味. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

6 个评论 关于: “C 语言 IQ 题..”

  1. Hello World! 在 2009年01月22日 12:31 说:回复

    这到题真难,问个外行的问题 ~i 代表什么意思啊?

  2. vande 在 2009年01月22日 12:33 说:回复

    -i = ~i + 1
    ~i = -i – 1….

  3. bones7456 在 2009年01月22日 13:16 说:回复

    呵呵,以前的排版太乱,现在又整理了下.好点了.

  4. Joe 在 2009年11月10日 14:53 说:回复

    int i, n=99; main() { for(i=0; i<=n; i–) { printf("#"); } }
    这个不行!

    • bones7456 在 2009年11月10日 15:36 说:回复

      果然是我搞错了,谢谢提醒~ 已经去掉了此解。

  5. kavinyao 在 2011年12月30日 20:39 说:回复

    第三题的解太妙了!

发表评论