首页 > 编程语言 >【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表

时间:2022-10-21 22:33:05浏览次数:48  
标签:name int 子类 age 链表 算法 n2 root public

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_java

算法题目描述

算法知识点如下:

模拟计算器,类型:算法初阶,比较简单。

设计学生类和子类,类型:基础知识,比较简单。

二叉树开展为链表,类型:栈,树,中等难度。

第一题算法题目描述

模拟简单的计算器。 要求:

(1)定义名为Number的类,在其中定义两个私有的整型数据成员n1和n2;

(2)在Number类中编写构造方法,赋予n1和n2初始值;

(3)再为Number类定义加(addition)、减(subtration)、乘(multiplication)、除(division)四个公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。注意:除法运算时要抛出除数为0的异常。

(4)在主方法中创建Number类的对象,调用上述各个方法,测试并输出计算结果,注意进行必要的异常捕获与处理。

Java解答参考思路

public class Number {
private int n1;
private int n2;
public Number(int n1, int n2) {
this.n1 = n1;
this.n2 = n2;
}
public int addition() {
return n1 + n2;
}
public int subtration() {
return n1 - n2;
}
public int multiplication() {
return n1 * n2;
}
private int division() {
if (n2 == 0) {
throw new IllegalArgumentException("除数参数不合法");
}
return n1 / n2;
}
public static void main(String[] args) {
Number number = new Number(6, 0);
System.out.println(number.addition());
System.out.println(number.subtration());
System.out.println(number.multiplication());
try {
System.out.println(number.division());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

第二题算法题目描述

设计一个学生类Student和它的一个子类Undergraduate,要求如下:

(1)Student类有name和age属性,一个包含两个人参数的构造器,用于给两属性赋值,一个show()方法打印Student的属性信息。

(2)本科生类Undergraduate增加一个degree(学位)属性。有一个包含三参数的构造器,前两个参数用于给集成的属性赋值,第三个参数给degree专业见值,一个show()方法用于打印Undergraduate的属性信息。

(3)在测试类中分别打印Undergraduate和Student对象,调用它们的show()

Java解答参考思路

public class test {
public static void main(String[] args) {
Student stu = new Student("student", 100);
stu.show();
Undergraduate undergraduate = new Undergraduate("Undergraduate", 20, "本科");
undergraduate.show();
}
}
class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show() {
System.out.println("名字:" + this.name + "\t年龄:" + this.age);
}
}
class Undergraduate extends Student {
private String degree;
public Undergraduate(String name, int age, String degree) {
super(name, age);
this.degree = degree;
}
public void show() {
System.out.println("名字:" + super.getName() + "\t年龄:" + super.getAge() + "\t学位:" + this.degree);
}
}

第三题算法题目描述

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。

什么是先序遍历呢?解释如下:

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_java_02

需要实现下面的例子:

【算法】算法题目三道模拟计算器,设计学生类和子类,二叉树开为链表_java_03

输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2: 输入:root = [] 输出:[]

示例 3: 输入:root = [0] 输出:[0]

提示: 树中结点数在范围 [0, 2000] 内 -100 <= Node.val <= 100

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?

Java解答思路

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public void flatten(TreeNode root) {
while (root != null) {
if (root.left == null)
root = root.right;
else {
TreeNode pre = root.left;
while (pre.right != null)
pre = pre.right;
pre.right = root.right;
root.right = root.left;
root.left = null;
root = root.right;
}
}
}
}

标签:name,int,子类,age,链表,算法,n2,root,public
From: https://blog.51cto.com/u_15312559/5784616

相关文章

  • 实验一:决策树算法实验
    实验一:决策树算法实验|博客班级|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-MachineLearning||----|----|----||作业要求|https://edu.cnblogs.com/......
  • 面向显式反馈的基于矩阵分解的推荐算法PMF
    论文:RuslanSalakhutdinovandAndriyMnih.ProbabilisticMatrixFactorization[C].NeurIPS2007.https://proceedings.neurips.cc/paper/2007/file/d7322ed717dedf1e......
  • 数据结构—顺序表和链表的比较
    单链表、循环链表和双向链表的时间效率比较 链式存储结构的优点:结点空间可以动态申请和释放数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素......
  • P 算法与 K 算法
    P算法与K算法作者:Grey原文地址:博客园:P算法与K算法CSDN:P算法与K算法说明P算法和K算法主要用来解决最小生成树问题,即:不破坏连通性删掉某些边,使得整体的权......
  • 两个链表的数进行相加
    给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和......
  • 单链表插入和删除一个节点的伪代码
    在单链表第i个元素之前插入元素e伪代码算法描述:(1)首先,定义一个指针p和计数因子j,并给计数因子j赋初值0(2)接着,用while循环开始遍历单链表,寻找第i-1个结点while循环条件:指针p不......
  • 算法分析与设计 西工大 noj 第二次实验
    算法分析与设计西工大noj第二次实验ProblemA0-1背包问题时限:1000ms内存限制:10000K总时限:3000ms描述:需对容量为c的背包进行装载。从n个物品中选取装入背包的物......
  • 【算法训练营day10】理论基础 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈
    【算法训练营day10】理论基础LeetCode232.用栈实现队列LeetCode225.用队列实现栈理论基础栈常用函数#include<stack>stack<int>s;s.empty();//如果栈为......
  • 【数据结构/C语言】有序单链表L1、L2合并
    1.根据输入的n和n个递增的有序数据建立一个带头结点的有序单链表L1,并输出有序链表中各元素值;2.根据输入的m和m个递增的有序数据建立一个带头结点的有序单链表L2,并输出有......
  • 算法 -Dijkstra算法
    以这个图为例,找到从起点到终点的耗时最短的路径(圆圈连线上的数字代表耗时)。graph={}graph["start"]={}graph["start"]["a"]=6graph["start"]["b"]=2graph["a"]={}graph["a......