以前觉得不错的经典题, 不过现在觉得是一些很
trick的技巧, 建议还是不要多费时间记, 最多开阔一点思维方式… 甚至不看也罢, 因为没啥实际意义. 还容易本末倒置描述: 编程实现1+2+….+n ,不允许使用乘除法 以及各种循环选择判断语句.
`这到题上来可能看到就会想,不用循环判断,那就直接用高斯公式一步到位吧.
但是发现也不允许使用乘除法,这就有了两个思路. 一巧妙构造乘除法,二不使用高斯公式.
1. 不使用高斯公式最巧妙的办法
先上代码. Code first ,尽量从代码就能看懂思路.这样有利于自己看各种框架源码.
1 | //只写核心算法部分,递归+短路与 |
核心就是 利用&& 两边都是布尔值.然后巧妙的利用 ans>0 或者c++中 非0的值就是true 特性.
2.巧妙使用高斯公式
1 | //贴的c++代码. java如何sizeof倒值得思考,没有的原因应该是因为设计者不想coder去关心这. |
这里利用bool的长度为1,然后去凑出一个n(n+1)的数组 . 然后利用 x>>1 右移1等于是除了2. 构造出高斯公式.比较取巧.可能不是面试官希望的方法,但是也算很机智.运用问题求解思路
其他还有一些构造函数法,手动叠加法…就不一一说了,因为感觉这两个比较精简经典
3.总结
简单说,这题的思路就是 题目不允许你用一堆常见的思路的时候. 你应该先把剩下可以使用的先列出来看看.
有哪些可能用的上, 然后一个个排除,剩下的几个肯定有正确的答案, 不能上来就慌了神**. 一定要有思路去做这类的”不允许使用xxx”的题目.**