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

题目描述:

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


分析:

首先想到的是写递归函数,但是遇到一个问题,递归函数总需要一个出口,不然会无穷递归下去。

出口一半是 if() return. 题目又要求不能使用 if 语句。

什么语句有类似与 if 的选择功能呢??


解法 1: || 运算符号

A || B 有如下性质: 当 A 是 true 时, B 语句不再运行。。这里就包含了 选择的功能。

// Method 2: recursive function
int Sum(int n)
{
  int ret = 0;
  n == 0 || (ret = Sum(n-1));
  return n + ret;
}

解法 2: 模板元编程 TMP

很酷的名字吧。。这是一个非常酷的技术,能够把计算的时间从运行期提前到编译期。

参考 Effective C++。

其实思想就是 利用函数模板的特化(specialization),来模拟 选择语句。

// Method 1: TMP, reference: Effective C++
template<unsigned n>
struct MySum{
  enum { value = MySum<n-1>::value + n };
};

// use template specialization to mimic if expression
template<>
struct MySum<0>{
  enum { value = 0 };
};

MySum<10>::value 就是我们要的结果。。


解法 3:

采用C++ 类中的 static 变量,已经构造函数在对象构造时会被自动调用的性质。

// Method 3: static variable of class
struct MyClass{
  MyClass(){
    sum += ++ n;
  }
  static int n; 
  static int sum;
};
// static members should be defined outside class body
int MyClass::n = 0;
int MyClass::sum = 0;

  MyClass a[10];
  cout << MyClass::sum << endl;



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《深入理解系统设计面试》是一本非常有用的系统设计面试指南。该指南深入讲解了系统设计的关键概念、原则和最佳实践。它适用于那些准备参加系统设计面试或想要提高系统设计技能的人群。 这本指南分为两部分。第一部分主要介绍了系统设计的基本概念和术语。它解释了系统设计面试的常见问题型,并提供了解决这些问题的方法和技巧。此外,该指南还详细介绍了常用的系统设计模式和架构,让读者能够更好地理解和应用这些概念。 第二部分是一系列实际的面试问题和解答。这些问题覆盖了各种不同的系统设计场景,包括分布式系统、缓存、数据库设计、消息队列等等。每个问题都提供了详细的解答和相应的讨论,读者可以从中学习到如何有效地分析问题、提出解决方案以及权衡不同的设计选择。 整本书的风格非常实用和易懂。它通过清晰的说明、图表和示例来解释概念,让读者能够更好地理解和掌握内容。此外,每个问题都有详细的解答和讨论,帮助读者深入思考和理解系统设计的各个方面。 总之,《深入理解系统设计面试》是一本非常有价值的系统设计指南。它提供了全面的知识和实践经验,帮助读者掌握系统设计的核心概念和技巧,从而在面试或实际工作中取得成功。无论你是准备参加系统设计面试还是提升个人技能,这本书都会对你有很大的帮助。 ### 回答2: 《Grokking the System Design Interview》是一本关于系统设计面试的书籍,旨在帮助读者掌握系统设计的技巧和策略。这本书通过详细的案例分析和解答常见面试问题的方法,帮助读者建立起解决复杂系统设计问题的能力。 这本书首先介绍了系统设计面试的背景和重要性,强调了良好的系统设计能力在面试中的价值。然后,书中逐步介绍了解决系统设计问题的一般方法和步骤,包括需分析、整体设计、数据库设计、缓存设计、分布式系统设计等方面。 《Grokking the System Design Interview》的亮点在于它通过真实世界的案例分析来解释不同的系统设计问题和解决方法。每个案例都包含了问题背景、需、约束条件和解决方案。通过阅读这些案例,读者可以了解不同型问题的思考方式和解决方案,并能够将这些方法应用到自己的系统设计问题中。 此外,书中还提供了一些常用的设计方案和优化技巧的讨论,例如使用缓存来提高系统性能、使用负载均衡来增加系统可扩展性等。这些技巧对于读者在面试中展示自己的技术能力和解决问题的能力非常有帮助。 总而言之,《Grokking the System Design Interview》是一本系统全面的系统设计面试指南,通过案例分析和实践经验,帮助读者掌握系统设计的核心原则和技巧。阅读这本书可以帮助读者在系统设计面试中脱颖而出,并取得成功。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值