求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 assist {public://定义第一个对象时N++, N = 1,sum = 1;//第二个对象时,N++, N = 2,sum += N = 1 + 2;//第二个对象时,N++, N = 3,sum += N = 1 + 2 + 3;//......assist(){N++;sum += N;}static void reset() //因为可能会循环多组,又因为N和sum都是静态的,所以每次要进行重置{N = 0; sum = 0; }//返回结果static unsigned int GetSum(){ return sum; }private:static int N;static int sum;
};int assist::N = 0;
int assist::sum = 0;//设置一个静态变量N和sum,在构造函数中进行累加运算;
//然后构造一个以辅助类为类型、大小为n的数组,重复调用此构造函数n次来实现n次的累加运算
class Solution {public:int Sum_Solution(int n) {assist::reset();assist * p = new assist[n];delete[]p;p = nullptr;return assist::GetSum();}
};

第二种方法:使用模板函数

//第二种方法:使用模板函数进行编程,相当于使用模板实现递归,显示定义输入参数为1的模块,相当于递归的出口
template <int m>
inline int SumTo()
{return m + SumTo<m - 1>();
}
template <>
inline int SumTo<1>()
{return 1;
}

第三种方法:使用虚函数

//第三种方法:使用虚函数class Base {public:virtual int Sum(int n){return 0;}
};Base* Array[2];//构成多态class Derived : public Base
{public://当n大于0时,!!n = 1;当n等于0时,!!n 等于0;//当结果!!n = 1时,Array[1]->Sum(n - 1);注意Array[1]存的是派生类的对象,//相当于基类指针指向派生类,在派生类的虚函数表中找Sum函数,调用的是派生类的Sum//当结果!!n = 0时,Array[0]->Sum(n - 1);注意Array[0]存的是基类的对象,//相当于基类指针指向基生类,在基类的虚函数表中找Sum函数,调用的是基类的Sum//当结果!!n = 0时,基类return 0,是‘递归’的出口virtual int Sum(int n) { return Array[!!n]->Sum(n - 1) + n; }};
//使用虚函数来构造递归,在基类中定义虚函数Sum(n)返回0,通过将指针数组的两个元素分别绑定到基类和派生类,其中基类的Sum()
//结束递归,!!n来构造true(1) false(0)来对指针数组进行访问
class Solution
{public:int Sum_Solution(int n){Base a;Derived b;Array[0] = &a;Array[1] = &b;return b.Sum(n);}
};

第四种方法:使用短路计算

//第四种方法//使用短路计算来构造递归:重点是输入0的时候输出0来结束递归
//缺点:递归的层数不能太深<3000//相当于也是’递归‘
//当 n = 0时,0 &&(ret += Sum_Solution) 一定等于0,相当于递归出口
//当 n > 0时,n &&(ret += Sum_Solution) 结果与n无关,等于(ret += Sum_Solution(n - 1)),进行递归
class Solution
{public:int Sum_Solution(int n) {int ret = n;n && (ret += Sum_Solution(n - 1));return ret;}
};

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

  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). //利用构造函数求解 /*class Temp{ pub ...

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

  3. (不带头结点的)单链表增删查改,逆置单链表(两种方法),求两个单链表的第一个公共结点,合并两个单链表,单循环链表中判断第一个入环点,约瑟夫环

    补充了每个算法的基本思想,并且画了思路图,源代码都经过调试成功 1.SlistNode.c文件 (1) (不带头结点的)单链表增删查改 #include "SlistNode.h" ...

  4. 求质数算法的N种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...

  5. 求质数算法的 N 种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在 CS ...

  6. (转)求质数算法的N种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...

  7. 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。...

    本题要求不能使用if, while, switch, for, ?: 以 及任何的比较语句,也就是要求我们不能用常规的方法来判断两个数的大小. 那么按照以往的方法,要判断两个数的大小,应该要将两个数进 ...

  8. oracle查找clob中的值,Oracle 查找带有CLOB字段的所有表

    myBatis的一对多查询,主要利用resultMap实现一次查询多个结果集 日常开发中有这中场景,一个用户有多个角色,一个角色又有多个菜单,想查出一个用户的所有菜单.除了常见的关联查询之外,更使用的 ...

  9. (剑指Offer)面试题46:求1+2+3+....+n

    题目: 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字及条件判断语句(a?b:c). 思路: 1.构造函数 在类中定义静态成员变量N和 ...

最新文章

  1. 既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?...
  2. Mybatis分页插件 - 示例
  3. linux下查看cc攻击
  4. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
  5. 【电商福利】双十二优惠福利专场
  6. EOS 智能合约源代码解读 (1)总体说明
  7. 虚拟背景背后的技术:直播时各种背景是怎么实现的?
  8. 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...
  9. 从零开始学前端:弹性盒模型(flex布局) --- 今天你学习了吗?(CSS:Day19)
  10. mysql point WKB格式 php 解析 unpack
  11. 如何简单粗暴地上手 TensorFlow 2.0?
  12. \sbin\nginx:cannot execute binary file
  13. mschart控件_使用MSChart控件绘制图表。
  14. Redis 内存碎片
  15. 计算机无法识别机械硬盘,机械硬盘无法识别【面对办法】
  16. IDEA社区版连接Mysql
  17. android studio开始暂停按钮
  18. 六轴机器人matlab工作空间分析
  19. 飞思卡尔MC9S12G64串口发送接收驱动
  20. Linux openwrt 树莓派 香蕉派 嵌入式 usb 声卡 PCM2704 2705 2706 CM108 PCM2704/2705/2706 linux专用声卡 专用usb声卡

热门文章

  1. 解决GitHub中头像显示异常、设置不了头像、README图片无法显示等问题
  2. Linux文件目录命名规则
  3. android 官方教程中文版
  4. [C++基础]025_虚函数和虚函数表
  5. 回溯算法-03八皇后问题
  6. 【数据结构】树状数组详解(Leetcode.315)
  7. 27计算机表演赛命题,27届计算机表演赛命题搜索赛答案(数学3)
  8. Django的主要开发流程(以扩充用户模型为例)
  9. Django开发准则与最佳实践
  10. SVD原理及其应用导论