剑指 Offer 64. 求1+2+…+n C++ 两种做法

题面:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
这道题完全不知道想考啥,所以一开始写了个乱搞算法(其实是借鉴了计算机算乘法的方法)

class Solution {
public:
    unsigned int build(int u) {
        unsigned int ret=u;
        ret|=ret<<1;
        ret|=ret<<2;
        ret|=ret<<4;
        ret|=ret<<8;
        ret|=ret<<16;
        return ret;
    }
    int sumNums(int n) {
        unsigned int a[14];
        unsigned int ans=0;
        a[0]=n;
        a[1]=a[0]+a[0];
        a[2]=a[1]+a[1];
        a[3]=a[2]+a[2];
        a[4]=a[3]+a[3];
        a[5]=a[4]+a[4];
        a[6]=a[5]+a[5];
        a[7]=a[6]+a[6];
        a[8]=a[7]+a[7];
        a[9]=a[8]+a[8];
        a[10]=a[9]+a[9];
        a[11]=a[10]+a[10];
        a[12]=a[11]+a[11];
        a[13]=a[12]+a[12]; 

        n=n+1;
        ans+=build(n&(1<<0))&a[0];
        ans+=build(n&(1<<1))&a[1];
        ans+=build(n&(1<<2))&a[2];
        ans+=build(n&(1<<3))&a[3];
        ans+=build(n&(1<<4))&a[4];
        ans+=build(n&(1<<5))&a[5];
        ans+=build(n&(1<<6))&a[6];
        ans+=build(n&(1<<7))&a[7];
        ans+=build(n&(1<<8))&a[8];
        ans+=build(n&(1<<9))&a[9];
        ans+=build(n&(1<<10))&a[10];
        ans+=build(n&(1<<11))&a[11];
        ans+=build(n&(1<<12))&a[12];
        ans+=build(n&(1<<13))&a[13];

        return (int)ans>>1;
    }
};

看了评论区的题解之后,发现其实还是可以用递归的,虽然不能用if,但可以用&&来实现if的作用(做这道题之前完全没想过if和&&还能这么扯上关系),然后也自己写了一下:

class Solution {
public:
    int sumNums(int n) {
        int ret=n;
        n&&(ret+=sumNums(n-1));//若n为0,则不会执行后面的语句,递归结束;
        return ret;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC89C52单片机+L298N 智能循迹避障小车-毕业论文 摘 要:利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 关键词:智能小车;STC89C52单片机; L298N;红外对管 Intelligent tracking and obstacle-avoid car Xiao Wei School of Physics and Electronic Information,Grade 2006 Class 9 ,Instructor:Liu Hankui Abstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the controlling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52. Keywords: Smart Car; STC89C52 MCU; L298N; Infrared Emitting Diode 第一章 绪论 1.1智能小车的意义和作用 自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程,制造能替代人劳动的机器一直是人类的梦想。 随着科学技术的发展,机器人的感觉传感器种类越来越多,其视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要清晰图像只需要粗略感觉的系统考虑使用接近觉传感器是一种实用有效的方法。 机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVG—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。 该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、执行部分、CPU。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要,传感检测部分考虑到小车一般不需要感知清晰的图像,只要粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。单片机驱动直流电机一般有两种方案:第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。考虑到实际情况,本文选择第二种方案。CPU使用STC89C52单片机,配合软件编程实现。 1.2智能小车的现状 现智能小车发展很快,从智能玩具到其它各行业都有实质成果。其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。比较出名的飞思卡尔智能小车更是走在前列。我此次的设计主要实现循迹避障这两个功能。 第二章 方案设计与论证 根据要,确定如下方案:在现有玩具电动车的基础上,装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值