【OJ - 基础数学】求1+2+3+...+n(不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句)
文章目录
- OJ - 求1+2+3+...+n
- 解题思路
OJ - 求1+2+3+…+n
题目难度:中等
OJ链接:求1+2+3+…+n__牛客网 (nowcoder.com)
题目描述:
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
数据范围: 0 < n ≤ 200
进阶: 空间复杂度 O(1),时间复杂度 O(n)
示例1:
输入:5
返回值:15
示例2:
输入:1
返回值:1
解题思路
不能使用判断语句,可以从「逻辑运算符」考虑
方法一:求和公式
方法二:循环求和
方法三:逻辑运算符
常规递归求解:
递推公式:f (n) = f (n - 1) + n
递归终止条件:f (1) = 1
class Solution {public:int Sum_Solution(int n) {if(n == 1) // 当n == 1时,终止递归return n;elsereturn n + Sum_Solution(n - 1);}
};
用逻辑与代替上面递归中的 if 条件控制语句即可:
class Solution {public:int Sum_Solution(int n) { n != 1 && (n += Sum_Solution(n - 1)); // 当n == 1时,表达式为假,停止递归return n;}
};
- 时间复杂度:O(n)
- 空间复杂度:O(n),取决于递归深度
方法四:利用构造函数求解
主要思路:
利用静态成员变量 N 和 sum;
调用 n 次构造函数,N 递增 n 次,并且累加 n 次变量 N 到 sum 中求和。
class A {public:A() {_N++;_sum += _N;}static int GetSum() { return _sum; }private:static int _N;static int _sum;
};int A::_N = 0; // 静态成员变量必须在类外定义
int A::_sum = 0; // 静态成员变量必须在类外定义class Solution {public:int Sum_Solution(int n) {A *p = new A[n]; // 调用n次构造函数delete []p; // 防止内存泄漏p = nullptr; // 防止悬空指针// A a[n]; // 若支持变长数组,可以这样写return A::GetSum();}
};
- 时间复杂度:O(n),调用 n 次构造函数
- 空间复杂度:O(n),开辟 n 个 A 类对象的空间
再介绍一种方法,即把方法四改成内部类,了解即可,内部类在实际中用的很少:
class Solution {private:/* 定义一个内部类,专门给Solution解决1+2+…+n的问题,更好的体现封装性 */class A {public:A() {_N++;_sum += _N;}};public:int Sum_Solution(int n) {A *p = new A[n]; // 调用n次构造函数delete []p; // 防止内存泄漏p = nullptr; // 防止悬空指针return _sum;}private:static int _N;static int _sum;
};int Solution::_N = 0; // 静态成员变量必须在类外定义
int Solution::_sum = 0; // 静态成员变量必须在类外定义
【OJ - 基础数学】求1+2+3+...+n(不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句)相关推荐
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C) 文章目录 求1+2+3+...+n,要求不能使用乘除法.for ...
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). //利用构造函数求解 /*class Temp{ pub ...
- C++描述杭电OJ 2023.求平均成绩 ||
C++描述杭电OJ 2023.求平均成绩 || Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩 ...
- C++描述杭电OJ 2009.求数列的和 ||
C++描述杭电OJ 2009.求数列的和 || Problem Description 数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. Input 输入数据有多组, ...
- SWUST OJ 971求二叉树的深度
题目 #inclde <iostream> #include <cstdlib> #define MAXN 100 using namespace std;typedef st ...
- 西南科技大学OJ题 求最小生成树(Prim算法)1075
求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...
- 第七周 oj 1030 求奖金总数
问题及代码: Copyright(c)2016,烟台大学计算机学院 all rights reserved. 作者:曹欣宇 完成日期:2016年10月18日 版本号:v1.0 题目描述 求奖金总数 输 ...
- 第八周 oj 2399 求倒数和
问题及代码: /*Copyright(c)2016,烟台大学计算机学院 all rights reserved. 作者:曹欣宇 完成日期:2016年10月18日 版本号:v1.0 题目描述 求倒数和 ...
- 东华OJ 9 求阶乘结果0的个数
问题描述 : 编写一个程序,求出N!的末尾含有多少个0. 提示:在乘积中,末尾有多少个0,主要看各乘数的素数因子中有多少个2和5,每一个2和5的结合将给末尾贡献一个0.而乘数中因子2的个数远多于因子5 ...
最新文章
- 从源码了解spring bean实例化过程
- springmvc @PathVariable注解进行传参操作
- linux系统安装金蝶_linux 操作系统安装配置vnc
- 还不会ts?一文带你打开ts的大门
- 信息学奥赛一本通C++语言——1061:求整数的和与均值
- 子类重载父类函数_Python面向对象之继承、重写与重载
- andpods授权码订单号分享_Axure 9.0学生免费授权申请详细步骤
- 【2016年第4期】国务院批复建立促进大数据 发展部际联席会议制度
- Tomcat的下载安装及静态部署
- 数学之美笔录(3):隐含马尔可夫模型(详解)
- 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
- 【react实战小项目:笔记】用React 16写了个订单页面
- Excel怎么将文本格式数值转换为可计算的数值型
- 基于单片机的超市收银机
- 华为认证是自学还是报班合适
- linux0.11缓冲区管理程序阅读注释笔记
- JAVA获取前一个月的第一天和最后一天
- 2022大学生就业指导答案——雷五明、雷辉等
- spring集成druid示例
- 我看你骨骼惊奇,送你本武林秘籍--《三子棋至多子棋的扩展》
热门文章
- UE5引擎源码小记 -- UGameEngine::Tick
- GitHub怎么创建分支以及合并分支
- YouTuBe各类优秀频道推荐二音乐舞蹈
- 连马云都自愧不如 真正的草根创业者
- python 浮点数出现长串0 错误位数
- js替换字符串中指定的字符
- 《UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论》一1.3 数据—判断淘宝店铺页面设计优劣的显微镜...
- 某县大数据资源平台建设项目可行性研究报告暨建设方案
- 外挂基础知识入门教学|工具下载
- 常用外贸企业邮箱账号格式,安全邮箱外贸邮箱格式怎么选?