程序设计2道题的设计思路和代码

img

img


求按题目要求给出最后的完整代码,用C语言、Python、Java等都可以

第一个图没有PPT内容。
第二张图,基于 Python 语言的代码如下:

# 定义节点类
class Node:
    def __init__(self, node_id, location, node_type):
        self.node_id = node_id               # 节点 ID,范围为 1-10
        self.location = location             # 节点位置,字符串类型,如 "位置1"
        self.node_type = node_type           # 节点类型,字符串类型,选项为 "交换机", "路由器", "服务器", "计算机"
        self.next = None                     # 指向下一个节点的指针,默认为 None

# 定义链表类
class LinkedList:
    def __init__(self):
        self.head = None                     # 头节点,默认为 None

    # 添加节点到链表尾部
    def add_node(self, node):
        if self.head is None:                 # 头节点为空时,直接将该节点设为头节点
            self.head = node
        else:
            current = self.head
            while current.next is not None:   # 找到链表的最后一个节点
                current = current.next
            current.next = node               # 将该节点添加到最后一个节点的 next 属性上

    # 删除指定节点
    def remove_node(self, node):
        if self.head == node:                 # 如果要删除的节点是头节点,则将头节点指向第二个节点
            self.head = self.head.next
            return
        current = self.head
        while current is not None and current.next != node:  # 找到要删除节点的前一个节点
            current = current.next
        if current is None:                  # 如果链表中没有找到该节点,则返回
            return
        current.next = current.next.next     # 将前一个节点的 next 指针指向要删除节点的下一个节点

    # 在指定位置插入新节点
    def insert_node(self, new_node, pos):
        if pos == 0:                         # 插入位置为 0,直接将新节点作为头节点
            new_node.next = self.head
            self.head = new_node
            return

        current_pos = 0
        current_node = self.head
        while current_node is not None and current_pos != pos - 1:  # 找到要插入位置的前一个节点
            current_node = current_node.next
            current_pos += 1

        if current_node is None:             # 如果链表中没有找到指定位置的节点,则返回
            return

        new_node.next = current_node.next   # 将新节点的 next 指针指向当前节点的 next 指针,即将其插入在当前节点之后
        current_node.next = new_node        # 将当前节点的 next 指针指向新节点,使其成为当前节点的下一个节点

    # 显示所有节点信息
    def display_nodes(self):
        node_list = []
        current = self.head
        while current is not None:
            node_list.append((current.node_id, current.location, current.node_type))
            current = current.next
        print(node_list)

# 初始化链表
ll = LinkedList()

# 添加10个节点
node1 = Node(1, "位置1", "交换机")
node2 = Node(2, "位置2", "路由器")
node3 = Node(3, "位置3", "服务器")
node4 = Node(4, "位置4", "计算机")
node5 = Node(5, "位置5", "交换机")
node6 = Node(6, "位置6", "路由器")
node7 = Node(7, "位置7", "服务器")
node8 = Node(8, "位置8", "计算机")
node9 = Node(9, "位置9", "交换机")
node10 = Node(10, "位置10", "路由器")

# 添加到链表中
ll.add_node(node1)
ll.add_node(node2)
ll.add_node(node3)
ll.add_node(node4)
ll.add_node(node5)
ll.add_node(node6)
ll.add_node(node7)
ll.add_node(node8)
ll.add_node(node9)
ll.add_node(node10)

# 显示所有节点信息
ll.display_nodes()

# 删除第五个节点
ll.remove_node(node5)

# 显示剩余的节点信息
ll.display_nodes()

# 插入第五个节点
new_node = Node(5, "九教北402外", "计算机")
ll.insert_node(new_node, 4)

# 显示所有的节点信息
ll.display_nodes()

# 在链首插入一个节点
new_node = Node(0, "九教西209", "服务器")
ll.insert_node(new_node, 0)

# 显示所有的节点信息
ll.display_nodes()

# 在链尾插入一个节点
new_node = Node(11, "逸夫312", "路由器")
ll.add_node(new_node)

# 显示所有的节点信息
ll.display_nodes()

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

这里给出两个编程题的设计思路和Java代码:

题1:输入两个正整数m和n,求其最大公约数和最小公倍数。

思路:

  1. 获取两个数字m和n
  2. 求最大公约数:使用欧几里得算法,m与n的最大公约数等于n与m%n的最大公约数。递归计算直到得到0。
  3. 求最小公倍数:最小公倍数等于m*n/最大公约数

代码:

java
public int gcd(int m, int n) {
    if (m % n == 0) return n;
    return gcd(n, m % n); 
}

public int lcm(int m, int n) {
    int gcd = gcd(m, n);
    return m * n / gcd;
}

public static void main(String[] args) {
    int m = 12, n = 8;
    int gcd = gcd(m, n);  // 4
    int lcm = lcm(m, n); // 24
    System.out.println("最大公约数:" + gcd);
    System.out.println("最小公倍数:" + lcm);
}

题2:输出100~999之间的所有对称数及其数值。注意:对称数指一个数的前后顺序相反的数,如123和321。

思路:

  1. 遍历100~999之间的所有数字
  2. 将数字转为字符串,并将字符串反转得到反转字符串
  3. 如果原字符串和反转字符串相等,则找到一个对称数
  4. 输出对称数及其数值

代码:

java
public static void main(String[] args) {
    for (int i = 100; i <= 999; i++) {
        String s = String.valueOf(i);
        String reverse = new StringBuilder(s).reverse().toString();
        if (s.equals(reverse)) {
            System.out.println(s + " " + i); 
        }
    }
}

运行结果:
121 121
131 131
141 141
151 151
161 161
171 171
181 181
191 191
212 212
232 323
262 262
272 272
282 282
292 292
......
希望这个回答能帮助你理解这两道编程题的设计思路和Java代码实现。