您的位置:首页 > Web前端

发散思维题——求1+2+3+...+n(剑指offer)

2015-10-12 15:40 274 查看
求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
;
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;
}


当然还有其他更好的方法,大家多多发散下思维!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息