每日练习-8

2023-09-20 22:40:42

目录

一、选择题

二、算法题

1.另类加法

2、走方格的方案数


一、选择题

1、

解析:当使用new运算符创建一个类的对象数组时,会调用该类的构造函数来初始化每个对象。因此,如果创建了5个对象,那么构造函数会被调用5次。
当使用delete运算符删除一个指针时,会调用该指针指向的对象的析构函数来释放内存。但是,如果该指针指向的是一个对象数组,那么必须使用delete[]运算符来删除整个数组,否则只会删除数组的第一个元素。因此,如果使用delete来删除一个对象数组,那么析构函数只会被调用1次,而剩下的4个对象会造成内存泄漏。答案为c

2、

解析:每个非静态的成员函数都有一个隐藏的this指针,所以排除A,B
这里用前置++和后置++来举例如何重载,
重载前置++:Date& operator++(),重载后置++:Date operator++(int),答案为C。

3、

解析:静态数据成员是类的成员变量,被声明为static关键字。它们与类的对象无关,而是与类本身相关联。静态数据成员在内存中只有一份副本,被类的所有对象共享。静态数据成员不能在类内初始化,而要在类外通过使用范围解析运算符::来重新声明静态变量从而对它进行初始化。但是如果加了const可以在类内初始化。静态数据成员可以受private修饰符的作用,也就是说它们可以被设置为私有的或公有的。静态数据成员可以通过类来直接调用,也可以通过对象来调用,但是一般都是通过类来调用,因为它们不需要当前对象的地址。

4、

解析:答案为B,这样做的原理是,当一个类对象在栈上创建时,编译器会自动调用其析构函数来释放内存。如果析构函数是私有的,那么编译器就无法访问它,也就无法在栈上创建对象。因此,只能通过new运算符在堆上创建对象,并且需要提供一个公有的成员函数来调用析构函数释放内存。

二、算法题

1.另类加法

题目解析:要实现不使用+或其他算数运算符的加法,我们可以利用位运算的原理。

假设A=0101,B=0011,我们用异或运算来计算A和B的不进位相加结果,即A ^ B = 0110,这个结果就是A和B的每一位相加后的结果,但是忽略了进位。

我们用与运算以及移位运算来计算A和B的进位结果,即A &B<<1 = 0010,这个结果就是A和B的每一位相加后产生的进位。

递归以上的运算,直到有一方为0,不为0的就是结果。

代码:
 

class UnusualAdd {
  public:
    int addAB(int A, int B) {
        int a = A;
        int b = B;
        if (A == 0) 
        {
            return B;
        } 
        else if (B == 0) 
        {
            return A;
        } 
        else 
        {
            a = A ^ B;
            b = (B & A) << 1;
            return addAB(a, b);
        }
     
    }
};

2、走方格的方案数

题目解析:首先判断nm的值是否为零,如果都为零,说明已经到达了右下角,返回步数为零。如果只有n为零,说明只能向右走,返回步数为一;如果只有m为零,说明只能向下走,返回步数为一;如果都不为零,说明可以向右或向下走,那么返回两种情况的步数之和。

代码:

#include <iostream>
#include <linux/limits.h>
#include<vector>
using namespace std;

int getStep(int n, int m) 
{
    
   if(n==0&&m==0)
   {
    return 0;
   }
   else if(n==0&&m!=0)
   {
    return 1;
   }
   else if(n!=0&&m==0)
   {
    return 1;
   }
   else return getStep(n-1,m)+getStep(n,m-1);

}

int main() {
    int n, m;
    while (cin >> n >> m) {
        cout << getStep(n, m) << endl;

    }
}

更多推荐

LeetCode 2097. 合法重新排列数对【欧拉通路,DFS】2650

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及

使用kubeadm快速部署一个k8s集群

0.前置准备准备好3台服务器,一台作为master,另外两台作为worker节点。3台服务器网络互通,os是centos-7.91.设置服务器操作关闭服务器防火墙:systemctlstopfirewalld永久关闭selinux:sed-i's/enforcing/disabled/'/etc/selinux/con

K8S:Yaml文件详解

目录一.Yaml文件详解1.Yaml文件格式2.YAML语法格式二.Yaml文件编写及相关概念1.查看api资源版本标签2.yaml编写案例(2)Deployment类型编写nginx服务(3)k8s集群中的port介绍(5)快速编写yaml文件(6)案例:自主式创建service并关联上面的pod(7)Podyaml

基于Levenberg-Marquardt算法的声源定位matlab仿真

目录1.算法运行效果图预览2.算法运行软件版本3.部分核心程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览2.算法运行软件版本matlab2022a3.部分核心程序....................................................................%ML

Spring Boot虚拟线程的性能还不如Webflux?

早上看到一篇关于SpringBoot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可能贴近现实操作的场景:从授权头信息中提取JWT验证JWT并从中提取用户的Email使用用户的Email去MySQL里执行查询返回用户记录测

K8S群集调度

K8S群集调度一、调度约束1.概述2.Pod启动典型创建过程(工作机制)3.调度过程4.Predicate的常见的算法5.常见的优先级选项6.指定调度节点:二、亲和性1.节点亲和性2.Pod亲和性3.键值运算关系4.示例5.Pod亲和性与反亲和性6.使用Pod反亲和性调度三、污点(Taint)和容忍(Toleratio

什么是Progressive Web App(PWA)?它们有哪些特点?

聚沙成塔·每天进步一点点⭐专栏简介⭐渐进式WebApp简介⭐PWAs的主要特点⭐总结⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供

利用Linux虚拟化技术实现资源隔离和管理

在现代计算机系统中,资源隔离和管理是非常重要的,特别是在多租户环境下。通过利用Linux虚拟化技术,我们可以实现对计算资源(如CPU、内存和存储)的隔离和管理,以提供安全、高效、稳定的计算环境。下面将详细介绍如何利用Linux虚拟化技术实现资源隔离和管理。一、什么是Linux虚拟化技术?Linux虚拟化技术是指在Lin

猫头虎博主第四期赠书活动:《精通Go语言:(第2版) 》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

神经网络 05(损失函数)

一、损失函数在深度学习中,损失函数是用来衡量模型参数的质量的函数,衡量的方式是比较网络输出和真实输出的差异,损失函数在不同的文献中名称是不一样的,主要有以下几种命名方式:损失函数(lossfunction)代价函数(costfunction)目标函数(objectivefunction)误差函数(errorfuncti

【Vue】模板语法,事件处理器及综合案例、自定义组件、组件通信

一、事件处理器我们之前事件监听可以使用v-on指令1、事件修饰符在Vue中我们通过由点(.)表示的指令后缀来调用修饰符,比如:.stop:阻止事件冒泡。当事件触发时,该修饰符将停止事件进一步冒泡到父元素。相当于调用了event.stopPropagation().prevent:阻止默认事件。默认情况下,某些元素会有默

热文推荐