64 求1+2+3+...+n(发散思维能力 )
题目描述:
求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+2+···+n
今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家. 题目:求1+2+···+n,要 ...
- 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n
<剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...
- LeetCode 剑指Offer 64.求1,2到n的和, 不使用循环/判断及乘除
题目 剑指 Offer 64. 求1+2+-+n 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: ...
- 【LeetCode】剑指 Offer 64. 求1+2+…+n
[LeetCode]剑指 Offer 64. 求1+2+-+n 文章目录 [LeetCode]剑指 Offer 64. 求1+2+-+n package offer;public class Solu ...
- PTA基础编程题目集6-4求自定类型元素的平均 (函数题)
6-4 求自定类型元素的平均 (10 分) 本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Avera ...
- 6-4 求一组数中的最大值、最小值和平均值
6-4 求一组数中的最大值.最小值和平均值 编写函数,求一组数中的最大值.最小值和平均值. 函数接口定义: float fun(int a[],int n,int *max,int *min); 其中 ...
- 剑指offer 算法 (发散思维能力)
题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解析:短路求值原理 class Solutio ...
- 面试题64. 求1+2+…+n
Title 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6 示例 ...
- 剑指Offer - 面试题64. 求1+2+…+n(递归)
1. 题目 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6示例 ...
最新文章
- DynamicPopulate
- Amazon Aurora是如何设计原生云关系型数据库的?
- Reverse Linked List II leetcode java
- “泡泡玛特乐园”,难逃IP大考
- Windows Server 2012活动目录基础配置与应用(新手教程)之4---域用户的基本管理...
- 8086汇编-做1到100的加法并显示结果
- 配置IntelliJ IDEA
- oracle12c之 控制pdb中sga 与 pga 内存使用
- 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围
- docker使用centos镜像
- Windows7修改hosts提示:您没有权限在此位置中保存文件
- 我为啥要当程序员未来规划漫谈
- 卡方分布、T分布和F分布
- could not find or load the Qt platform plugin windows的解决方法
- VS2015 CDKEY
- 西交学电气还是计算机,上南大还是上西交学电气
- python计算增长率函数_python – 基于增长率优化值的迭代计算
- C# 传递数组参数_一维数组_二维数组
- 这几款软件的隐藏功能,你们知道多少?
- android平台下OpenGL ES 3.0绘制圆点、直线和三角形
热门文章
- STM32——EEPROM
- CPropertySheet 与CPropertyPage 的基本使用
- 二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)
- LeetCode 1000. 合并石头的最低成本(区间DP)
- LeetCode 1561. 你可以获得的最大硬币数目
- LeetCode 249. 移位字符串分组(哈希)
- LeetCode 739. 每日温度(单调栈)
- LeetCode 1154. 一年中的第几天
- quantaxis 云服务器_量化金融策略开源框架:QUANTAXIS
- Python中查找包含它的列表元素的索引,index报错!!!