今天在《剑指offer》里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家。
题目:求1+2+···+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
点评:这个问题本身没有太多的实际意义,因为在软件开发中不可能有这么苛刻的限制。但不少面试官认为这是一道不错的能够考查应聘者发散思维能力的题目,而发散思维能够反映出应聘者知识面的宽度,以及对编程相关技术理解的深度。
分析:通常求1+2+ ··· +n有三种常规思路:(1)循环;(2)递归(需要用if语句或者条件判断语句来判断是继续递归下去还是终止递归);(3)使用公式n*(n+1)/2。因为题目限制,这三种常规方案都不可行。那么如何用非常规方案求解该问题呢?下面提供两种解题思路,对应四种解决方案,本质上还是采用循环或递归的思路,只是写法改变了。
解题思路一:循环角度