题目描述:

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

解题思路:

1)利用&&的短路特性

2)  利用sizeof特性,使用公式n(n+1)/2

3)利用构造函数求解:

先定义一个类型,然后创建n个该类型的实例,那么这个类型的构造函数将被调用n次。将累加的代码放到构造函数中。

4)利用虚函数求解:

测试用例:

1) 边界值:(输入0和1)

2) 功能测试(n=5,n=10)

代码:

1)&&的短路特性 复杂度:O(n)

 1 1 class Solution {
 2 2 public:
 3 3     int Sum_Solution(int n) {
 4 4         int ans = n;
 5 5         n && (ans = n + Sum_Solution(n - 1)); //&&即逻辑与,拥有短路特性。(&&左侧为false则右侧的表达式不执行)
 6 6         return ans;
 7 7     }
 8 8 };
 9
10 Code01

View Code

缺点:递归的层数不能太深<3000


2)sizeof特性,使用公式n(n+1)/2

1 1 class Solution {
2 2 public:
3 3     int Sum_Solution(int n) {
4 4         bool a[n][n+1]; //不行:int(四字节),short(2字节)
5 5         //char a[n][n+1]; //可以:char(1字节)
6 6         return sizeof(a)>>1; //右移等价于除以2
7 7     }
8 8 };

Code02


3)  利用构造函数

 1 class Unit{
 2     public:
 3         Unit(){++N;Sum+=N;}
 4         static void reset(){N=0;Sum=0;} //static
 5         static unsigned int GetSum(){return Sum;} //static
 6     private:
 7         static unsigned int N;
 8         static unsigned int Sum;
 9 };
10
11 unsigned int Unit::N = 0; //一般在类外初始化(类内也不会报错)
12 unsigned int Unit::Sum = 0; //类外不用在加static
13
14 class Solution {
15 public:
16     int Sum_Solution(int n) {
17         Unit::reset();
18         Unit *p = new Unit[n];
19         int res = Unit::GetSum();
20         delete[] p;
21         p=nullptr;
22         return res; //return Unit::GetSum();
23     }
24 };

Code03

注意:

「1」局部static对象在第一次使用前分配,在程序结束是销毁。并不是在局部作用域结束是销毁。

「2」动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。(即必须被显示销毁!!局部作用域并不会自动销毁)

「3」静态内存:用来保护局部static对象、类static数据成员、以及定义在任何函数外的变量。编译器创建,程序结束时销毁(不受局部作用域控制)。

栈内存:用于保存定义在函数内的非static对象。仅在定义的程序运行的时候才存在(局部作用域)。

自由空间(堆内存):存储动态分配的对象。必须显示销毁。

「4」new默认情况下是默认初始化,即内置对象或组合型对象的值是为定义的,而类类型对象将使用默认构造函数进行初始化:

    string *ps = new string; //初始化为空的字符串

int * pi = new int; //pi指向一个未初始化的int         可使用值初始化:int * pi = new int(); z值初始化为0。  也可以传入参数:int * pi = new int(1024);

或列表初始化 vector<int> *pv = new vector<int>{0,1,2,3,4,5,6,7,8,9};

「5」delete接受对象为指针类型,

当其释放一块非new创建的内存,或者将相同的指针(指向同一块内存的指针)释放多次,其行为是未定义的。

「6」当程序用光了可用内存,new表达式会失败,默认情况抛出std::bad_alloc异常。

阻止抛出异常: int *p = new (nothrow) int; //如果失败返回空指针。


4) 利用虚函数求解

基础知识补充:

转载于:https://www.cnblogs.com/GuoXinxin/p/9960740.html

64 求1+2+3+...+n(发散思维能力 )相关推荐

  1. 面试题之发散思维能力:如何用非常规方法求1+2+···+n

    今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家.   题目:求1+2+···+n,要 ...

  2. 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n

    <剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...

  3. LeetCode 剑指Offer 64.求1,2到n的和, 不使用循环/判断及乘除

    题目 剑指 Offer 64. 求1+2+-+n 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: ...

  4. 【LeetCode】剑指 Offer 64. 求1+2+…+n

    [LeetCode]剑指 Offer 64. 求1+2+-+n 文章目录 [LeetCode]剑指 Offer 64. 求1+2+-+n package offer;public class Solu ...

  5. PTA基础编程题目集6-4求自定类型元素的平均 (函数题)

    6-4 求自定类型元素的平均 (10 分) 本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Avera ...

  6. 6-4 求一组数中的最大值、最小值和平均值

    6-4 求一组数中的最大值.最小值和平均值 编写函数,求一组数中的最大值.最小值和平均值. 函数接口定义: float fun(int a[],int n,int *max,int *min); 其中 ...

  7. 剑指offer 算法 (发散思维能力)

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解析:短路求值原理 class Solutio ...

  8. 面试题64. 求1+2+…+n

    Title 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6 示例 ...

  9. 剑指Offer - 面试题64. 求1+2+…+n(递归)

    1. 题目 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6示例 ...

最新文章

  1. DynamicPopulate
  2. Amazon Aurora是如何设计原生云关系型数据库的?
  3. Reverse Linked List II leetcode java
  4. “泡泡玛特乐园”,难逃IP大考
  5. Windows Server 2012活动目录基础配置与应用(新手教程)之4---域用户的基本管理...
  6. 8086汇编-做1到100的加法并显示结果
  7. 配置IntelliJ IDEA
  8. oracle12c之 控制pdb中sga 与 pga 内存使用
  9. 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围
  10. docker使用centos镜像
  11. Windows7修改hosts提示:您没有权限在此位置中保存文件
  12. 我为啥要当程序员未来规划漫谈
  13. 卡方分布、T分布和F分布
  14. could not find or load the Qt platform plugin windows的解决方法
  15. VS2015 CDKEY
  16. 西交学电气还是计算机,上南大还是上西交学电气
  17. python计算增长率函数_python – 基于增长率优化值的迭代计算
  18. C# 传递数组参数_一维数组_二维数组
  19. 这几款软件的隐藏功能,你们知道多少?
  20. android平台下OpenGL ES 3.0绘制圆点、直线和三角形

热门文章

  1. STM32——EEPROM
  2. CPropertySheet 与CPropertyPage 的基本使用
  3. 二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)
  4. LeetCode 1000. 合并石头的最低成本(区间DP)
  5. LeetCode 1561. 你可以获得的最大硬币数目
  6. LeetCode 249. 移位字符串分组(哈希)
  7. LeetCode 739. 每日温度(单调栈)
  8. LeetCode 1154. 一年中的第几天
  9. quantaxis 云服务器_量化金融策略开源框架:QUANTAXIS
  10. Python中查找包含它的列表元素的索引,index报错!!!