题目描述:

求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)

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

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


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

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

Code02


3)  利用构造函数

 class Unit{
public:
Unit(){++N;Sum+=N;}
static void reset(){N=;Sum=;} //static
static unsigned int GetSum(){return Sum;} //static
private:
static unsigned int N;
static unsigned int Sum;
}; unsigned int Unit::N = ; //一般在类外初始化(类内也不会报错)
unsigned int Unit::Sum = ; //类外不用在加static class Solution {
public:
int Sum_Solution(int n) {
Unit::reset();
Unit *p = new Unit[n];
int res = Unit::GetSum();
delete[] p;
p=nullptr;
return res; //return Unit::GetSum();
}
};

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) 利用虚函数求解

基础知识补充:

64 求1+2+3+...+n(发散思维能力 )的更多相关文章

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

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

  2. 17. 抽象建模能力&发散思维能力&综合(5)

    抽象建模能力 题一:[扑克牌顺子] LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽 ...

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

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

  4. 【剑指offer】面试题 64. 求 1+2+3+...+n

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

  5. 剑指 Offer 64. 求1+2+…+n + 递归

    剑指 Offer 64. 求1+2+-+n Offer_64 题目描述 题解分析 使用&&逻辑短路规则来终止循环 package com.walegarrett.offer; /** ...

  6. 《剑指offer(第二版)》面试题64——求1+2+...+n

    一.题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句 (即三元运算符,A? B : C) 二.题解 虽然求和问 ...

  7. 【Java】 剑指offer(64) 求1+2+…+n

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 求1+2+…+n,要求不能使用乘除法.for.while.if ...

  8. 《剑指offer》面试题64. 求1+2+…+n

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

  9. 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

随机推荐

  1. codevs——T1267 老鼠的旅行

    http://codevs.cn/problem/1267/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

  2. POJ 2029

    二维树状数组可解此题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  3. 关于Linux静态库和动态库的分析

    关于Linux静态库和动态库的分析 关于Linux静态库和动态库的分析 1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可运行代码的二进制形式.能够被操作系统加 ...

  4. 状态压缩dp poj 3254 hdu5045

    近来感觉状态压缩dp的强大性(灵活利用了二进制运算非常关键). . . 于是做了俩提来看看..毕竟队友是专业的dp.我仅仅是管中窥豹下而已.. 日后有机会再与之玩耍玩耍...ps:假设上天再给我一次机 ...

  5. cocos2d-x 是怎样渲染的

    要知道 是怎样渲染的:要先选中 就可以 谁知道: c ocos2d-x 是怎样渲染的 ? 每一个CCNODE自己有draw 北京-菜菜: :: draw draw负重渲染 ************** ...

  6. 《转》Ceilometer Alarm API 參数具体解释 及 举例说明

    Ceilometer Alarm是H版新加入的功能,监控报警是云平台必不可少的部分,Ceilometer已经实现了比較完好的监控体系.报警怎么能缺少呢?用过AWS CloudWatch Alarm的人 ...

  7. BZOJ-4706 B君的多边形 OEIS

    题面 题意:有一个正n多边形,我们要连接一些对角线,把这个多边形分成若干个区域,要求连接的对角线不能相交,每个点可以连出也可以不连出对角线,即最终不要求所有区域均为三角形,问总方案数mod (10^9 ...

  8. 解决PopupWindow的阴影覆盖问题

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/108 PopupWindow阴影覆盖问题 最近这段时间需求 ...

  9. Class工具类

    Class工具类,提供操作class类的方法,源码如下: import java.io.File; import java.io.FileFilter; import java.io.IOExcept ...

  10. C#中图片转换为Base64编码,Base64编码转换为图片

    #region 图片转为base64编码的字符串 public string ImgToBase64String(string Imagefilename) { try { Bitmap bmp = ...