zoukankan      html  css  js  c++  java
  • 求1+2+……+n

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

    思路:已知1+2+……+n = n(n+1)/2,但是题目条件限制,故公式不能用。求和无外乎循环递归,但是一般的循环需要用for或while,递归需要用判断语句if,因此要改变思路去思考。

    基于循环的做法:利用构造函数。设置类中的静态变量N 和sum,每次实例化对象调用构造函数时把N自增并加到sum上。求1~n的和就是要实例化n个对象。

     1 class Temp
     2 {
     3 public:
     4     Temp()
     5     { 
     6         ++N;
     7         sum += N;
     8     }
     9     static void Reset()
    10     {
    11         N = 0;
    12         sum = 0;
    13     }
    14     static unsigned int GetSum()
    15     {
    16         return sum;
    17     }
    18 private:
    19     static unsigned int N;
    20     static unsigned int sum;
    21 };
    22 unsigned int Temp::N = 0;
    23 unsigned int Temp::sum = 0;
    24 
    25 unsigned int Sum_solution1(unsigned int n)
    26 {
    27     Temp::Reset();
    28     Temp *p = new Temp[n];
    29     delete p;
    30     p = NULL;
    31     return Temp::GetSum();
    32 }

    运行结果:

    基于递归的做法

    可以利用虚函数,其中一个执行递归函数的功能,另一个处理递归终止条件的判断。但是问题又来了,如何把一个数n转化为bool型呢?可以利用!!n绕过if判断得到bool类型(0 or 1)。

     1 class A;
     2 A *Array[2];
     3 class A
     4 {
     5 public:
     6     virtual unsigned int sum(unsigned int n)
     7     {
     8         return 0;
     9     }
    10 };
    11 class B:public A
    12 {
    13 public:
    14     unsigned int sum(unsigned int n)
    15     {
    16         return Array[!!n]->sum(n - 1) + n;
    17     }
    18 };
    19 
    20 unsigned int Sum_solution2(unsigned int n)
    21 {
    22     A a;
    23     B b;
    24     Array[0] = &a;
    25     Array[1] = &b;
    26 
    27     return Array[1]->sum(n);
    28 }

    运行结果:

    注:此题考察的是发散思维。

  • 相关阅读:
    一位测友的真实面试题
    内部cms系统测试
    po模式
    描述器
    monkey命令
    进程管理工具supervisor
    webpack打包绝对路径引用资源和element ui字体图标不显示的解决办法
    pycharm flask debug调试接口
    应对ADT(Eclipse)的No more handles解决办法
    收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
  • 原文地址:https://www.cnblogs.com/ivorfeng/p/3063894.html
Copyright © 2011-2022 走看看