刷题笔记之十二(快到碗里来+跳台阶+变态跳台阶+不用加减乘除做加法+三角形+猴子分桃+反转部分单向链表)

news2024/10/7 10:18:17

目录

1. 快到碗里来

2. 跳台阶

3. 变态跳台阶

4. ConcurrentHashMap使用lock关键字保证线程安全;Arrays.asList返回值是List接口对象

5. 字符串对象比较相等,使用equals比较内容;使用== 比较的是地址

6. 编译命令: javac 源文件名称.java; 运行命令: java 主类名称 要传递的参数

7.  int类型对象成员变量赋予默认值是在,对象产生时执行,在类加载之后,不属于类加载过程

8. 不用加减乘除做加法

9. 三角形

10. 猴子分桃

11. 反转部分单向链表

12. 当所有前台线程(用户线程)执行完毕,java进程就认为程序全部执行完毕

13.Serial.parNew.CMS这三个收集器在JDK1的时候就有;G1收集器是在JDK7才出现的

14. instanceof运算符用于:判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。


1. 快到碗里来

题目链接:快到碗里来__牛客网 (nowcoder.com)

题目要求:

 题目分析:

计算机周长:c = 2*3.14*r

这道题需要注意的是 输入的范围[1,2^128]  

如果使用int和long的话,都不满足这个范围,

如果使用double的话,计算会受精度影响(不过这个题对精度问题要求不高也可以使用)

最好的还是使用BigDecimal

初始化BigDecimal对象,可以传两种参数

BigDecimal(String val)        new BigDecimal("3.14");//注意带上双引号

BigDecimal(double val)    同样不能使用double作为构造参数

解决了用什么来接收输入的问题,下面就直接就是根据题意比较输出了 

 上代码

这个是用double来接收的,对于这道题double还是可以的

import java.util.*;
public class Main{
        public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            double n = scan.nextDouble();
            double r = scan.nextDouble();
            if(n > 2*3.14*r) {//放不进去
                System.out.println("No");
            }else {
                System.out.println("Yes");
            }
        }
    }
}

使用BigDecimal

import java.util.*;
import java.math.*;
public class Main{
        public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            BigDecimal n = scan.nextBigDecimal();
            BigDecimal r = scan.nextBigDecimal();
            BigDecimal len = new BigDecimal("6.28").multiply(r);
            System.out.println(n.compareTo(len) == 1 ? "No" : "Yes");
        }
    }
}

2. 跳台阶

题目链接:跳台阶_牛客题霸_牛客网 (nowcoder.com)

题目要求:

 题目分析:

上代码

import java.lang.*;
public class Solution {
    public int jumpFloor(int target) {
        if(target <= 1) {
            return 1;
        }
        int a = 1,b = 1;
        for(int i = 2; i <= target; ++i) {
            int temp = a + b;
            a = b;
            b = temp;
        }
        return b;
    }
}

3. 变态跳台阶

题目要求:

要求时间复杂度和空间复杂度均为O(1) 

 题目分析:

上代码

    public int jumpFloorII (int number) {
        return (int)Math.pow(2,number-1);
    }
    public int jumpFloorII (int number) {
        return 1 << --number;
    }

4. ConcurrentHashMap使用lock关键字保证线程安全;Arrays.asList返回值是List接口对象

在java7中,下列哪个说法是正确的(D)

A. ConcurrentHashMap使用Synchronized关键字保证线程安全

B. HashMap实现了Collection接口

C. Arrays.asList方法返回java.util.ArrayList对象

D. SimpleDateFormat对象是线程不安全的

ConcurrentHashMap使用lock关键字保证线程安全  A错

Collection接口是线性表的顶级接口,HashMap实现的是Map接口    B错

Arrays.asList返回值是List接口对象    C错

public static <T> List <T> asList(T..a) {

            return newArrayList<(a)

}


5. 字符串对象比较相等,使用equals比较内容;使用== 比较的是地址

关于以下程序段,正确的说法是:(C)

String s1 = "abc" + "def";//1

String s2 = new String(s1);//2

if(s1.equals(s2))//3

System.out.println(".equals succeeded");//4

if(s1 == s2)

System.out.println("==succeeded");//6 

A. 行4,行6都不执行

B. 行6执行,行4不执行

C. 行4执行,行6不执行

D. 行4,行6都执行

字符串对象比较相等,使用equals比较内容

使用== 比较的是地址   选C


6. 编译命令: javac 源文件名称.java; 运行命令: java 主类名称 要传递的参数

用命令方式运行以下代码的运行结果是(C)

 命令: java f a b c

A. 程序编译错误    B. a b c     C. 程序运行错误      D. f

编译命令: javac 源文件名称.java

*.java -> *.class

运行命令: java 主类名称 要传递的参数(传递给main的args中)

java f a b c   ------>       args{a,b,c}注意传入三个参数,下标是0-2

而代码中访问args[3]  很明显数组访问越界,所以是程序运行错误,选C


7.  int类型对象成员变量赋予默认值是在,对象产生时执行,在类加载之后,不属于类加载过程

以下哪项不属于java类加载过程    (B)

A. 生成java.lang.Class对象

B. int类型对象成员变量赋予默认值

C. 执行static块代码

D. 类方法解析

B选项是,对象产生时执行,在类加载之后,不属于类加载过程


8. 不用加减乘除做加法

题目链接:不用加减乘除做加法_牛客题霸_牛客网 (nowcoder.com)

题目要求:

 题目分析:

 上代码

public class Solution {
    public int Add(int num1,int num2) {
        while(num2 != 0) {
            int sum = num1^num2;
            int carray = (num1&num2) << 1;
            num1 = sum;
            num2 = carray;
        }
        return num1;
    }
}

9. 三角形

题目链接:三角形__牛客网 (nowcoder.com)

题目要求:

 题目分析:

判断三条边是否可以组成一个三角形

要么使用"任意两边之和,大于第三边" ;   要么使用"任意两边之差,小于第三边"来进行判断

但这道题还有个问题时 三个边的长度范围是[1,10^100]

所以用int 和long来接收这三条边肯定是不可以的

使用double的话,虽然范围满足了,但又会存在精度丢失的问题(这道题不影响)

所以要学会使用BigDecimal

初始化BigDecimal对象,它的构造方法传参有两种

BigDecimal(String val)          BigDecimal(double val)

如果需要精度高的BigDecimal,还是不能使用double来作为构造参数

要传入一个字符串,才可以

对于BigDecimal做加法: add(BigDecimal)

                             减法: subtract(BigDecimal)

                             乘法: multiply(BigDecimal)

                             除法: divide(BigDecimal)

上代码(使用double来接收三条边)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            double a = scan.nextDouble();
            double b = scan.nextDouble();
            double c = scan.nextDouble();
            if((a+b) > c && (a+c) > b && (b+c) > a) {
                System.out.println("Yes");
            }else {
                System.out.println("No");
            }
        }
    }
}

使用BigDecimal来接收三条边 

import java.util.*;
import java.math.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            BigDecimal a = scan.nextBigDecimal();
            BigDecimal b = scan.nextBigDecimal();
            BigDecimal c = scan.nextBigDecimal();
            if(a.add(b).compareTo(c)>0 && a.add(c).compareTo(b)>0 && b.add(c).compareTo(a)>0) {
                System.out.println("Yes");
            }else {
                System.out.println("No");
            }
        }
    }
}

10. 猴子分桃

题目链接:猴子分桃__牛客网 (nowcoder.com)

题目要求:

题目分析:

 上代码

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
        long n = scan.nextLong();
        if(n == 0) {
            break;
        }
        long a = (long)Math.pow(5,n);
        long b = (long)Math.pow(4,n);
        System.out.println((a-4) + " " + (n + b - 4));
        }
    }
}

11. 反转部分单向链表

题目链接:反转部分单向链表__牛客网 (nowcoder.com)

题目要求:

 

题目分析:

上代码



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;



public class Main{
    static class Node {
        int val;
        Node next;
        public Node(int val) {
            this.val = val;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] nodes = br.readLine().trim().split(" ");
        Node dummyHead = new Node(-1);
        Node tail = dummyHead;
        for(int i = 0; i < n; i++ ) {
            //在链表中进行尾插
            Node node = new Node(Integer.parseInt(nodes[i]));
            tail.next = node;
            tail = node;
        }
        String[] part = br.readLine().split(" ");
        int left = Integer.parseInt(part[0]);
        int right = Integer.parseInt(part[1]);

//        Scanner scan = new Scanner(System.in);
//        int n = scan.nextInt();
//        //去除掉nextInt后面的 \n
//        scan.nextLine();
//        //"1 2 3 4"
//        String nodeValue = scan.nextLine();
//        String[] nodes = nodeValue.split(" ");
//        //创建虚拟头结点
//        Node dummyHead = new Node(-1);
//        Node tail = dummyHead;
//        for(int i = 0; i < n; i++ ) {
//            //在链表中进行尾插
//            Node node = new Node(Integer.parseInt(nodes[i]));
//            tail.next = node;
//            tail = node;
//        }
//        //输入左右反转区间
//        String part = scan.nextLine();
//        int left = Integer.parseInt(part.split(" ")[0]);
//        int right = Integer.parseInt(part.split(" ")[1]);

        Node newHead = reversepartList(dummyHead.next,left,right);
        //进行打印
        while(newHead != null) {
            System.out.print(newHead.val + " ");
            newHead = newHead.next;
        }
    }

    private static Node reversepartList(Node head, int left, int right) {
        Node dummyHead = new Node(-1);
        dummyHead.next = head;
        Node prev = dummyHead;
        //走到left的前一个位置
        for(int i = 0; i < left-1; i++) {
            prev = prev.next;
        }
        //保存prev的下一个位置,进行头插
        Node cur = prev.next;
        for(int i = left; i < right; i++) {
            //保存cur的下一个节点
            Node node = cur.next;
            //断开cur和node的连接
            cur.next = node.next;
            //再把node结点插入到prev之后
            node.next = prev.next;
            prev.next = node;
        }
        return dummyHead.next;
    }
}


12. 当所有前台线程(用户线程)执行完毕,java进程就认为程序全部执行完毕

jre判断程序是否执行结束的标准是 ( A )

A. 所有的前台线程执行完毕

B. 所有的后台线程执行完毕

C. 所有的线程执行完毕

D. 和以上都无关

JRE: java运行时环境

JDK: java开发工具包,包含了JRE

当所有前台线程(用户线程)执行完毕,java进程就认为程序全部执行完毕

setDameon(true)   一般我们创建的线程都是前台线程

后台线程: JVM垃圾回收机制     所以答案选A


13.Serial.parNew.CMS这三个收集器在JDK1的时候就有;G1收集器是在JDK7才出现的

下列哪项不属于jdk1.6垃圾收集器 (D)

A. Serial收集器      B. parNew收集器      C. CMS收集器       D. G1收集器

Serial.parNew.CMS这三个收集器在JDK1的时候就有了

而G1收集器是在JDK7才出现的,所以选D


14. instanceof运算符用于:判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。

instanceof运算符能够用来判断一个对象是否为:   (C)

A. 一个类的实例        B. 一个实现指定接口的类的实例

C. 全部正确               D. 一个子类的实例

instanceof 运算符用于:判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false,

使用方法

引用类型变量 instanceof (类、抽象类或接口)   所以答案选C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第七章第二节:B树和B+树

文章目录教程&#xff1a;1. B树1.1 B树的定义1.2 B树的高度1.3 B树的插入和 删除1.4 B树的删除1.5 总结&#xff1a;2. B树2.1 B树的查找2.2 B树与B树的对比2.3 总结教程&#xff1a; B树&#xff1a; https://www.bilibili.com/video/BV1b7411N798/?p72&share_sourceco…

深入理解MySQL数据库(Innodb存储引擎)

1.BTree 什么是B Tree 1&#xff09;树中每个结点至多有M棵子树&#xff08;即至多含有m-1个关键字&#xff09; 2&#xff09;若根节点不是终端结点&#xff0c;则至少有两颗子树 3&#xff09;所有的叶子结点都出现在同一层次上&#xff0c;并且不带信息 什么是BTree …

【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

【毕业设计】37-基于单片机智能楼宇消防监控系统设计&#xff08;原理图工程仿真工程源代码答辩论文答辩PPT&#xff09; 文章目录【毕业设计】37-基于单片机智能楼宇消防监控系统设计&#xff08;原理图工程仿真工程源代码答辩论文答辩PPT&#xff09;资料下载链接任务书设计说…

Redis集群(Cluster)

Redis集群(Cluster) 单台redis容量限制&#xff0c;如何进行扩容&#xff1f;继续加内存、加硬件么&#xff1f;单台redis并发写量太大有性能瓶颈&#xff0c;如何解决&#xff1f;redis3.0中提供了集群可以解决这些问题。 redis集群是对redis的水平扩容&#xff0c;即启动N个…

静态后台管理(9页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 |学生管理系统网页设计 | OA管理系统 | 后台管理模板 | 智能停车系统 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 H…

C++ Visual Studio 2022 中的改进、行为更改和错误修复

目录 Visual Studio 2022 版本 17.4 中的一致性改进 作用域的基础类型没有固定类型enum 定义中没有固定基础类型的枚举器类型enum Visual Studio 2022 版本 17.3 中的一致性改进 改进了指针之间的修饰符兼容性检查 Visual Studio 2022 版本 17.2 中的一致性改进 未终止的双向…

【分隔结构】定从分离

形式 先行词 其他定语 定语从句先行词 状语 定语从句作主语的先行词 谓语 定语从句 练习一 他们从一部分人来说&#xff0c;是受到了 1998 年才获得的 DNA 证据的启发&#xff0c;这份 DNA 证据&#xff0c;几乎肯定的证明了 Thomas Jefferson 和 他的奴隶 Sally Hemin…

力扣(LeetCode)16. 最接近的三数之和(C++)

双指针 快排使 numsnumsnums 正序。 设置三个指针 iii 指向 numsnumsnums 第一个数&#xff0c;从前往后枚举 nums[i]nums[i]nums[i] &#xff0c; lll 从 nums[i1]nums[i1]nums[i1] 往后&#xff0c;指向第二个数&#xff0c;rrr 从 nums.size()−1nums.size()-1nums.size()…

【博客539】使用openssl手动为k8s集群签发证书

使用openssl手动为k8s集群签发证书 创建ca私钥和ca证书 1、生成ca私钥&#xff1a;生成一个 2048 位的 ca.key 文件 openssl genrsa -out ca.key 2048 2、基于ca私钥&#xff0c;生成根(root)证书&#xff1a;在 ca.key 文件的基础上&#xff0c;生成 ca.crt 文件 openssl re…

[MQ] 交换机与队列的介绍

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

[Spring Cloud] Open Feign 使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

机械设计基础试题3

一、判断题&#xff08;请在后面的括号中&#xff0c;正确的填√&#xff0c;错误的填&#xff09; &#xff08;20分&#xff09; 1. 如果机构的自由度F&#xff1d;2&#xff0c;则机构无确定性运动。 &#xff08; &#xff09; 2. 作相对运动的三个构件的三个瞬心不一定在一…

JavaEE 进阶:Spring 的创建和使用

文章目录前言一、创建 Spring 项⽬1、创建⼀个 Maven 项⽬2、添加 Spring 框架⽀持3、添加启动类二、存储 Bean 对象1、创建 Bean2、将 Bean 注册到容器三、获取并使⽤ Bean 对象1、创建 Spring 上下⽂① ApplicationContextⅠ 注意事项② BeanFactory③ ApplicationContext VS…

【浅学Java】Bean的作用域和生命周期

Bean的作用域和生命周期1. Bean的作用域1.1 什么是Bean的作用域1.2 Bean的6种作用域singleton——单例作用域prototype——多例作用域request——请求作用域session——会话作用域application——全局作用域(了解)websoccket——HTTP WebSocket作用域(了解)1.3 设置作用域2. Be…

计算机毕业设计node.js+vue+Element企业员工信息管理系统

项目介绍 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用node框架和node来完成对系统的设计。整个开发过程首先对企业员工管理系统进行需求分…

LVS-NAT模式部署

目录 一、环境准备 1、准备三台centos服务器 2、实验拓扑 3、NAT模式介绍 二、LVS-NAT模式部署 1、给lvs服务器安装LVS 2、新建LVS集群 3、添加Real Server服务器节点 4、开启路由转发 5、给后端web服务器配置网关 6、效果测试 一、环境准备 1、准备三台centos服务器…

ctfhub-web-warmup

打开题目链接 是一张图 查看源代码 提示source.php 访问这个文件 得到源码 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…

Java毕业设计项目_企业级实战全栈项目中信CRM

【教程、代码】文章底部 1.学习目标视频教程目录【教程、代码】文章底部2.CRM 系统概念与项目开发流程2.1. CRM基本概念 圈内存在这么一句话&#xff1a;“世上本来没有CRM&#xff0c;大家的生意越来越难做了&#xff0c;才有了CRM。”在同质化竞争时代&#xff0c;顾客资产尤…

[附源码]java毕业设计社区医院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RabbitMQ初步到精通-第六章-RabbitMQ之死信队列

目录 第六章-RabbitMQ之死信队列 1. 死信概念 2. 死信架构 3. 死信来源 3.1 消息 TTL 过期 3.2 队列达到最大长度&#xff08;队列满了&#xff0c;无法再添加数据到 mq 中&#xff09; 3.3 消息被拒绝&#xff08;basic.reject 或 basic.nack&#xff09;并且 requeuefa…