AcWing 84. 求1 + 2 + … + n
写在前面:AcWing是由北大一神级人物——“大雪菜” 创办的算法交流社区, 里面除了正常 oj 网站的功能之外, 还提供单人训练、双人匹配、云端操作系统等模式,除此之外不定期举行各种打卡活动,而且可以分享题解和心得,完全可以当成空间来玩。欢迎大家入坑。
点击前往:AcWing
题目描述
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
样例
输入:10
输出:55
解题思路
这是一个没什么意思而且很狗的题, 常规操作不能用. 只能想别的办法
这个题正常来说有三种做法:
- 求和公式 (n+1)*n/2, 但是不能用乘除法
- 循环从1加到n, 但是不能使用各种循环
- dfs, 但是dfs里面需要判断语句
写之前, 我们得知道, 一个性质:
假如有一个语句: A && B, 如果 A 是 false 的话, B语句是不执行的, 因为这个语句一定是 false
或者语句: A || B, 如果 A 是 true 的话, B语句是不执行的, 因为这个语句一定是 true
这是系统为了减少不必要的计算而设置的.
可以通过这个性质满足判断的要求.
dfs公式: getSum(n)=n+getSum(n-1)
已过代码
class Solution {
public:
int getSum(int n) {//因为这个函数返回的是int型, 所以不用 long long
int ans=n;
(n>0) && (ans+=getSum(n-1));
//先判断n是否大于0, 大于 0 的话执行下一句, 否则直接跳过.
return ans;
}
};