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,怎么两个-号,会变成一个呢?半角的引号也变了,唉…
Hello World! 在 2009年01月22日 12:31 说:【 】
这到题真难,问个外行的问题 ~i 代表什么意思啊?
vande 在 2009年01月22日 12:33 说:【 】
-i = ~i + 1
~i = -i – 1….
bones7456 在 2009年01月22日 13:16 说:【 】
呵呵,以前的排版太乱,现在又整理了下.好点了.
Joe 在 2009年11月10日 14:53 说:【 】
int i, n=99; main() { for(i=0; i<=n; i–) { printf("#"); } }
这个不行!
bones7456 在 2009年11月10日 15:36 说:【 】
果然是我搞错了,谢谢提醒~ 已经去掉了此解。
kavinyao 在 2011年12月30日 20:39 说:【 】
第三题的解太妙了!