文章目录

  • 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),取决于递归深度

方法四:利用构造函数求解

主要思路:

  1. 利用静态成员变量 N 和 sum;

  2. 调用 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. 求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 ...

  2. 求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 ...

  3. C++描述杭电OJ 2023.求平均成绩 ||

    C++描述杭电OJ 2023.求平均成绩 || Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩 ...

  4. C++描述杭电OJ 2009.求数列的和 ||

    C++描述杭电OJ 2009.求数列的和 || Problem Description 数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. Input 输入数据有多组, ...

  5. SWUST OJ 971求二叉树的深度

    题目 #inclde <iostream> #include <cstdlib> #define MAXN 100 using namespace std;typedef st ...

  6. 西南科技大学OJ题 求最小生成树(Prim算法)1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...

  7. 第七周 oj 1030 求奖金总数

    问题及代码: Copyright(c)2016,烟台大学计算机学院 all rights reserved. 作者:曹欣宇 完成日期:2016年10月18日 版本号:v1.0 题目描述 求奖金总数 输 ...

  8. 第八周 oj 2399 求倒数和

    问题及代码: /*Copyright(c)2016,烟台大学计算机学院 all rights reserved. 作者:曹欣宇 完成日期:2016年10月18日 版本号:v1.0 题目描述 求倒数和 ...

  9. 东华OJ 9 求阶乘结果0的个数

    问题描述 : 编写一个程序,求出N!的末尾含有多少个0. 提示:在乘积中,末尾有多少个0,主要看各乘数的素数因子中有多少个2和5,每一个2和5的结合将给末尾贡献一个0.而乘数中因子2的个数远多于因子5 ...

最新文章

  1. 从源码了解spring bean实例化过程
  2. springmvc @PathVariable注解进行传参操作
  3. linux系统安装金蝶_linux 操作系统安装配置vnc
  4. 还不会ts?一文带你打开ts的大门
  5. 信息学奥赛一本通C++语言——1061:求整数的和与均值
  6. 子类重载父类函数_Python面向对象之继承、重写与重载
  7. andpods授权码订单号分享_Axure 9.0学生免费授权申请详细步骤
  8. 【2016年第4期】国务院批复建立促进大数据 发展部际联席会议制度
  9. Tomcat的下载安装及静态部署
  10. 数学之美笔录(3):隐含马尔可夫模型(详解)
  11. 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
  12. 【react实战小项目:笔记】用React 16写了个订单页面
  13. Excel怎么将文本格式数值转换为可计算的数值型
  14. 基于单片机的超市收银机
  15. 华为认证是自学还是报班合适
  16. linux0.11缓冲区管理程序阅读注释笔记
  17. JAVA获取前一个月的第一天和最后一天
  18. 2022大学生就业指导答案——雷五明、雷辉等
  19. spring集成druid示例
  20. 我看你骨骼惊奇,送你本武林秘籍--《三子棋至多子棋的扩展》

热门文章

  1. UE5引擎源码小记 -- UGameEngine::Tick
  2. GitHub怎么创建分支以及合并分支
  3. YouTuBe各类优秀频道推荐二音乐舞蹈
  4. 连马云都自愧不如 真正的草根创业者
  5. python 浮点数出现长串0 错误位数
  6. js替换字符串中指定的字符
  7. 《UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论》一1.3 数据—判断淘宝店铺页面设计优劣的显微镜...
  8. 某县大数据资源平台建设项目可行性研究报告暨建设方案
  9. 外挂基础知识入门教学|工具下载
  10. 常用外贸企业邮箱账号格式,安全邮箱外贸邮箱格式怎么选?