发散思想题——求1+2+3+.+n(剑指offer)
发散思维题——求1+2+3+...+n(剑指offer)
当然还有其他更好的方法,大家多多发散下思维!
求1+2+3+...+n
- 参与人数:1364时间限制:1秒空间限制:32768K
- 通过比例:27.43%
- 最佳记录:0 ms|0K()
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
链接:http://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:由于不能用一些运算和关键字,所以就要我们开动下大脑了。首先我想到的递归,一般的递归最后有个判断的结束符if(n==1) return 1;之类的,但是这里不能用if 那可以用什么代替吗? 有的!n本身就带有运算就可以了,想到逻辑运算符&& 可以解决问题! 但是递归的效率本身就不是很高,尤其是n很大的时候;
那么还有什么其他的方法吗? 有的!我想到的利用构造函数,和静态变量;每次让它做加法,调用n次就可以了,这样的效率明显要比递归来的快 !
/**** 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 */ #include<cstdio> #include<iostream> using namespace std; static int N; static int Sum; /* class FunSum { public: FunSum(){++N;Sum+=N;} }; class Solution { public: int Sum_Solution(int n) { N=0; Sum=0; FunSum *a = new FunSum[n]; delete []a; a=NULL;//不能让a变成野指针 return Sum; } };*/ class Solution { public: int Sum_Solution(int n) { int sum = n; sum && (sum += Sum_Solution(n-1)); return sum; } }; int main() { int n; Solution so; while(scanf("%d",&n)!=EOF) { printf("%d\n",so.Sum_Solution(n)); } return 0; }
当然还有其他更好的方法,大家多多发散下思维!
版权声明:本文为博主原创文章,未经博主允许不得转载。