求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)。
思路:由于不能用一些运算和关键字,所以就要我们开动下大脑了。首先我想到的递归,一般的递归最后有个判断的结束符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;
}
当然还有其他更好的方法,大家多多发散下思维!