求1+2+3+···+n,要求不用for、while、if、else、switch、case等控制语句

这道题本身并不难,主要难在限制条件。通常情况我们求n的前n项和除了用前n项和公式n*(n+1)/2外,就是用循环和递归,连续累加n次。但是题目要求不用循环控制语句。这给我们出了一个难题。如果用循环就要用到while或者for,用递归的话就要用到if判断。这该怎么办呢?

解法一:

求n个数的累加和就是让累加n次。我们可以在一个类中定义静态变量,然后用构造函数来操作这个变量,然后输出结果。那怎么能让构造函数不用循环和递归操作n次呢,我们于是想到定义数组,这样就会连续调用n次构造函数,以实现我们的目的

class A
{
public:
A()
{
sum+=n;
n++;
}
static int sum;
static int n;
};
int A::n=1;
int A::sum=0;
A a[5]=new A[5];
cout<<A::sum<<endl;
delete []a;

这样的话就可以求出结果

解法二:

我们还可以用虚函数来解决这个问题,定义一个类和类中的虚函数,让另一个类去继承

class B
{
public:
virtual int sum(int n)
{
return 0;
}
};
B *array[2];
class C:public B
{
public:
int sum(int n)
{
return n+array[!!(n-1)]->sum(n-1); //对一个数!之后就变成0,再一次取反就变成1
}
};
B b;
C c;
array[0]=&b;
array[1]=&c;
cout<<c.sum(5)<<endl;

解法三:

把上边的思路拓展一下,我们可以想到用函数指针,也是定义一个数组

int (*ptr[2])(int); //定义一个函数指针数组
int fun1(int n)
{
return 0;
}
int fun2(int n)
{
return n+ptr[!!(n-1)](n-1);
}
//下面这几句在主函数中
ptr[0]=fun1;
ptr[1]=fun2;
cout<<fun2(5)<<endl;

解法四:

用函数模板,以及模板特化

template <int n>
struct D
{
enum sum {N=D<n-1>::N+n};
};
template <>
struct D<1>
{
enum sum{N=1};
};
cout<<D<5>::N<<endl;

求1+2+3+···相关推荐

  1. 力扣解题——求根到叶子节点数字之和

    难度:中等 题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到 ...

  2. HJ86 求最大连续bit数

    描述 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 本题含有多组样例输入. 输入描述: 输入一个byte数字 输出描述: 输出转成二进制之后连续 ...

  3. 利用牛顿法求平方根-Go语言实现

    牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...

  4. 求字符串全排列 python实现

    文章目录 算法思想 附上c语言实现 参考 算法思想 输入一个字符串,打印这个字符串中字符的全排列. eg: 输入:abc 输出:abc acb bac bca cab cba 思路:将求字符串的全排列 ...

  5. 正视自己的所想所求,活出真实的自己

    你有没有发现有时我们会觉得不开心,是因为有时候我们会觉得有时候我们很穷,过得没有别人好.其实,有时候我们过得不好,真的不是因为穷.很多时候,我们习惯把生活的不愉快归罪于缺钱: 所以会觉得不开心,如果我 ...

  6. 经典笔试上机考题-表达式求值

    相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...

  7. python符号求导

    https://blog.csdn.net/m0_46149708/article/details/109024564 from sympy import * x, y, z = symbols('x ...

  8. 矩阵乘以其矩阵转置求导-数学

    20210703 矩阵论 https://zhuanlan.zhihu.com/p/288541909?utm_source=wechat_session 矩阵运算法则 20210529 https: ...

  9. 解释为什么用梯度下降而不是直接求导数为0的解

    问题: 在计算线性回归最大似然估计的解的时候,最后的推导结果是 为什么不直接求出θ?而是一步步迭代求出θ? 原因 因此,梯度下降可以节省大量的计算时间.此外,它的完成方式允许一个简单的并行化,即在多个 ...

  10. PyTorch入门学习(二):Autogard之自动求梯度

    autograd包是PyTorch中神经网络的核心部分,简单学习一下. autograd提供了所有张量操作的自动求微分功能. 它的灵活性体现在可以通过代码的运行来决定反向传播的过程, 这样就使得每一次 ...

最新文章

  1. 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
  2. 不用写一行代码,这款 高颜值 可视化神器,值得try一try!
  3. python 股票指标库talib_TaLib在股票技术分析中的应用
  4. php装箱,php兑现装箱算法
  5. POJ 2185 Milking Grid (KMP,GCD)
  6. 《Groovy in Action》笔记
  7. 【MySQL】RPM包安装
  8. sqlldr 参数介绍
  9. 微信40125错误的坑
  10. 双球坐标系_【天文】教你认识三大天球坐标系!(上)
  11. 我的世界服务器矿怎么无限刷,我的世界中可以无限刷矿的指令是什么quest; | 手游网游页游攻略大全...
  12. 人员管理系统+报销系统
  13. 计算机基础之程序设计基本方法
  14. 数据结构(从概念到C++实现)
  15. OO ALV checkbox更新的问题
  16. 【路径规划】基于遗传算法求解固定的开放式多旅行推销员问题(M-TSP)附matlab代码
  17. 数字信号处理:循环卷积快速计算技巧
  18. 短视频去水印工具小程序
  19. 面向对象编程(三) --- 抽象类和接口
  20. Java实现RSA加密算法

热门文章

  1. LeetCode 高级 - 单词接龙
  2. 实型数据在内存中的存放形式
  3. 【Python100天学习笔记】番外篇 Python面试面经、笔试题目汇总
  4. systemd 的标准输入、标准输出和标准错误
  5. 数据结构学习-循环链表:处理约瑟夫环问题
  6. 网页实现自适应(学习)
  7. 接口json参数形式
  8. html语言字体间距怎么设,css中如何设置字/行间距?
  9. Matplotlib subplot()函数用法详解
  10. 【计算机网络】TCP握手详情