关于“火柴棍式”程序员面试题

文章转载自陈大大的博客“火柴棍式”程序员面试题

下面是一个C程序,想要输出20个减号,粗心的程序员把代码写错了,你需要修改一下的代码,但是你只能添加或修改其中的一个字符,请给出三种方案:

int n = 20;

for(int i = 0; i < n; i--)
{
    printf("-");
}

不要以为这题不是很难,我相信你并不那么容易能找到3种方法。我觉得,如果你能在10分钟内找出这三种方法,说明你真的很聪明,而且反应很快。当然,15分钟内也不赖。不过,你要是30分钟内找不到三种方法,当然,不说明你笨了,最多就是你的反应还不够快。嘿嘿。就当是玩玩吧。

下面是我的答案:

//第一种解法:在for循环中给n加一个负号
for(int i = 0; i < -n; i--)
 
//第二种解法:把 n 初始化成 -20
int n = -20;
 
//第三种解法:把for循环中的 i 初始化成40
for(int i = 40; i < n; i--)

不过,我要告诉你,以上这些答案都不对,不满足for循环条件(我就知道你会偷看答案的),不过,顺着这些思路走很接近了。呵呵。

下面是正确答案——

//第一种解法:在for循环中给 i 加一个负号
for(int i = 0; -i < n; i--)
 
//第二种解法:在for循环中把 i-- 变成 n--
for(int i = 0; i < n; n--)
 
//第三种解法:把for循环中的 < 变成 +
for(int i = 0; i + n; i--)

关于前面的两种解法,估计大家都木有问题,第三种解法对于不是很深入了解C语言中for循环的同学们来说理解就稍微拐点弯,还记得for循环吗?

for(表达式 1;表达式 2;表达式 3)语句
它的执行过程如下:

(1)先求表达式 1;

(2)求表达式2,若其值为真(值为非0),则执行for循环体中的语句,然后执行下面第三步,若为假(值为0),则结束循环,跳到第5步;

(3)求解表达式3;

(4)转回上面第(2)步骤继续执行;

(5)结束循环,执行for语句下面的一个语句。

因此只要for循环中表达式2(i+n)只要不为零就满足循环条件。

其它相关的变种题如下:

  • 通过修改、增加一个字符,让其输出21个减号
  • 通过修改、增加一个字符,让其只输出1个减号
  • 通过修改、增加一个字符,让其不输出减号


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值