zoukankan      html  css  js  c++  java
  • 剑指offer47:位运算+递归。求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)。

    2 思路和方法

      (1)递归,不能使用if等条件判断语句,可以使用&&逻辑运算符的短路特性实现。当n=0时,不进行后一个判断的计算,作为递归终止

      (2)利用sizeof(a)计算bool数组的字节数,bool类型在C++中占一个字节。bool a = [n][n+1]; 因一共有n*(n+1)个1,下三角或者上三角,第一行:[1]和为1;第二行:[1][1] 和为2;第三行:[1][1][1]和为3,……。bool类型的数据a,sizeof(a)=n*(n+1),所以1+2+3+...+n=sizeof(a)=n*(n+1)/2,或者是sizeof(a)>>1。

    3 C++核心代码

     1 #include<iostream>
     2 
     3 #include<vector>
     4 
     5 using namespace std;
     6 
     7 class Solution {
     8 public:
     9     int Sum_Solution(int n) {
    10         int sum = n;
    11         sum && (sum += Sum_Solution(n - 1));// 利用前一个判断短路;当n=0时,不进行后一个判断的计算,作为递归终止
    12         return sum;
    13     }
    14 };
    15 
    16 int main()
    17 {
    18     Solution a;
    19 
    20     int res = a.Sum_Solution(5);
    21     cout << "result = " << res << endl;
    22     system("pause");
    23     return 0;
    24 }
    View Code
    1 class Solution {
    2 public:
    3     int Sum_Solution(int n) {
    4         bool a[n][n+1];
    5         return sizeof(a)>>1;
    6     }
    7 };
    View Code

    参考资料

    https://blog.csdn.net/feng_zhiyu/article/details/82112248

  • 相关阅读:
    Bootstrap按钮
    Bootstrap标签页
    Identity 使用的命名空间
    bootstrap复选框和单选按钮
    更改Identity用户信息
    SSM配置梳理
    敏捷软件开发 第十三章~第十七章
    敏捷软件开发 第七章、第八章、第九章
    敏捷软件开发 第六章 一次编程实践
    敏捷软件开发 一至五章
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11423776.html
Copyright © 2011-2022 走看看