发散思维题——求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;
}
当然还有其他更好的方法,大家多多发散下思维!
参与人数: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;
}
当然还有其他更好的方法,大家多多发散下思维!
相关文章推荐
- 面试题3:二维数组中的查找
- 面试题四:替换空格
- 剑指offer第一题
- 剑指Offer 面试题3:二维数组中查找
- 二叉树两个结点的最低公共祖先
- 根据后序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据后序和中序遍历重建二叉树
- 二叉树两个结点的最低公共祖先
- 《剑指Offer》面试题1:赋值运算符函数
- 剑指offer第三题:二维数组中查找
- 剑指offer 重建二叉树 java实现
- 剑指offer 替换空格 java实现
- 九度 Online Judge 之《剑指 Offer》一书相关题目解答
- 【练习笔记】剑指offer-面试题8 :旋转数组的最小数字
- 【练习笔记】剑指offer-变态跳台阶
- 【练习笔记】剑指offer-矩形覆盖
- 【练习笔记】剑指offer-面试题10 :二进制中1的个数
- 【练习笔记】剑指offer-数的整次方