西一木 发表于 2024-3-21 10:12:52

求求各位大佬帮帮忙教教孩子咋写,按照springboot3.0一步一步做的,好人一生平安

完成以下算法题并提交运行“结果截图”和“代码文件”:

假设在周末舞会上,男士们和女士们进入舞厅时,各自排 成一队。跳舞开始时,依次从男队和女队的队头上各出一人 配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数 不相同,则较长的那一队中未配对者等待下一轮舞曲。现要 求写一个程序,模拟上述舞伴配对问题。

第 1 行两个正整数,表示男士人数 m 和女士人数 n,1≤m,n≤1000;

第 2 行一个正整数,表示舞曲的数目 k,k≤1000。

输出共 k 行,每行两个数,之间用一个空格隔开,表示配对舞伴的序号,男士在前,女士在后。

分析:设计两个队列分别存放男士和女士。每对跳舞 的人一旦跳完后就回到队尾等待下次被选。

样例输入:

2 4

6

样例输出:

1 1

2 2

1 3

2 4

1 1

2 2


源码如下:
CircleQueueDemo.java:
class CircleQueue {
    private int maxSize;
    private int front;
    private int rear;
    private int[] arr;

    public CircleQueue(int maxSize) {
      this.maxSize = maxSize;
      arr = new int;
      front = 0;
      rear = 0;
    }

    /**
   * 判断队列是否满
   * @return
   */
    public boolean isFull() {
      return (rear + 1) % maxSize == front;
    }

    /**
   * 判断队列是否为空
   * @return
   */
    public boolean isEmpty() {
      return rear == front;
    }

    /**
   * 添加数据到队列
   * @param n
   */
    public void addQueue(int n) {
      if (isFull()) {
            System.out.println("Queue is full");
            return;
      }
      arr = n;
      rear = (rear + 1) % maxSize;
    }

    /**
   * 获取队列的数据,出队列
   * @return
   */
    public int getQueue() {
      if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
      }
      int value = arr;
      front = (front + 1) % maxSize;
      return value;
    }

    /**
   * 显示队列的所有数据
   */
    public void showQueue() {
      if (isEmpty()) {
            System.out.println("Queue is empty");
            return;
      }
      for (int i = front; i < front + size(); i++) {
            System.out.print(arr+" ");
      }
    }

    /**
   * 求出当前队列有效数据的个数
   * @return
   */
    public int size() {
      return (rear + maxSize - front) % maxSize;
    }

    /**
   * 显示队列的头数据,注意不是取出数据
   * @return
   */
    public int headQueue() {
      if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
      }
      return arr;
    }
}

public class CircleQueueDemo {
    public static void main(String[] args) {
      // 作业代码实现在这里
      
    }
}


CircleQueueLinkDemo.java:
class LinkNode {
    int data;
    LinkNode next;
    public LinkNode(int data) {
      this.data = data;
    }
}

class CircleQueueLink{
    LinkNode front;
    LinkNode rear;
    /**
   * 初始化队列
   */
    public CircleQueueLink(){
      front = rear = null;
    }
    /**
   * 添加数据到队列
   * @param data
   */
    public void addQueue(int data){
      // 创建新的节点
      LinkNode newNode = new LinkNode(data);
      // 如果队列为空,front和rear都指向新节点;否则,rear指向新节点,新节点指向front(形成循环队列)
      if(front == null){
            front = rear = newNode;
            rear.next = front;
      }else{
            rear.next = newNode;
            rear = newNode;
            rear.next = front;
      }
    }
    /**
   * 获取队列的数据,出队列
   */
    public int getQueue(){
      // 如果队列为空,抛出异常;
      if(front == null){
            throw new RuntimeException("Queue is empty");
      }
      int value = front.data;
      // 如果队列只有一个节点,front和rear都指向null;否则,front指向下一个节点,rear指向front
      if(front == rear){
            front = rear = null;
      }else{
            front = front.next;
            rear.next = front;
      }
      return value;
    }
    /**
   * 显示队列的所有数据
   */
    public void display(){
      LinkNode temp = front;
      if(front == null){
            System.out.println("Queue is empty");
      }else{
            while(temp.next != front){
                System.out.print(temp.data + " ");
                temp = temp.next;
            }
            System.out.print(temp.data);
            System.out.println();
      }
    }
    /**
   * 判断队列是否为空
   * @return
   */
    public boolean isEmpty(){
      return front == null;
    }
    /**
   * 求出当前队列有效数据的个数
   * @return
   */
    public int size(){
      int count = 0;
      LinkNode temp = front;
      if(front == null){
            return 0;
      }else{
            while(temp.next != front){
                count++;
                temp = temp.next;
            }
            count++;
      }
      return count;
    }
    /**
   * 获取队列的数据,不出队列
   * @return
   */
    public int getFront(){
      if(front == null){
            throw new RuntimeException("Queue is empty");
      }
      return front.data;
    }
}

public class CircleQueueLinkDemo{
    public static void main(String[] args) {
      // 作业代码实现在这里
    }
}


FishC 发表于 2024-3-21 10:13:46

首先,我们需要理解题目的要求。

题目要求模拟舞伴配对问题,舞会开始时,男士和女士各自排成一队,每次从男队和女队的队头各出一个人配成舞伴。如果男队和女队初始人数不相同,则较长的队伍中未配对者等待下一轮舞曲。

我们可以使用队列来模拟这个过程。我们分别创建一个队列来存放男士和女士,每个队列中的元素表示一个人。

接下来,我们根据题目要求编写代码。

首先是使用数组实现的队列:

class CircleQueue {
    private int maxSize;
    private int front;
    private int rear;
    private int[] arr;

    public CircleQueue(int maxSize) {
      this.maxSize = maxSize;
      arr = new int;
      front = 0;
      rear = 0;
    }

    /**
   * 判断队列是否满
   * @return
   */
    public boolean isFull() {
      return (rear + 1) % maxSize == front;
    }

    /**
   * 判断队列是否为空
   * @return
   */
    public boolean isEmpty() {
      return rear == front;
    }

    /**
   * 添加数据到队列
   * @param n
   */
    public void addQueue(int n) {
      if (isFull()) {
            System.out.println("Queue is full");
            return;
      }
      arr = n;
      rear = (rear + 1) % maxSize;
    }

    /**
   * 获取队列的数据,出队列
   * @return
   */
    public int getQueue() {
      if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
      }
      int value = arr;
      front = (front + 1) % maxSize;
      return value;
    }

    /**
   * 显示队列的所有数据
   */
    public void showQueue() {
      if (isEmpty()) {
            System.out.println("Queue is empty");
            return;
      }
      for (int i = front; i < front + size(); i++) {
            System.out.print(arr + " ");
      }
    }

    /**
   * 求出当前队列有效数据的个数
   * @return
   */
    public int size() {
      return (rear + maxSize - front) % maxSize;
    }

    /**
   * 显示队列的头数据,注意不是取出数据
   * @return
   */
    public int headQueue() {
      if (isEmpty()) {
            throw new RuntimeException("Queue is empty");
      }
      return arr;
    }
}

public class CircleQueueDemo {
    public static void main(String[] args) {
      CircleQueue maleQueue = new CircleQueue(1000);
      CircleQueue femaleQueue = new CircleQueue(1000);

      // 输入男士和女士的人数
      int m = 2;
      int n = 4;

      // 将男士和女士依次加入队列
      for (int i = 1; i <= m; i++) {
            maleQueue.addQueue(i);
      }
      for (int i = 1; i <= n; i++) {
            femaleQueue.addQueue(i);
      }

      // 输入舞曲的数目
      int k = 6;

      // 配对舞伴
      for (int i = 0; i < k; i++) {
            int male = maleQueue.getQueue();
            int female = femaleQueue.getQueue();
            System.out.println(male + " " + female);
            maleQueue.addQueue(male);
            femaleQueue.addQueue(female);
      }
    }
}

然后是使用链表实现的队列:

class LinkNode {
    int data;
    LinkNode next;
    public LinkNode(int data) {
      this.data = data;
    }
}

class CircleQueueLink{
    LinkNode front;
    LinkNode rear;
    /**
   * 初始化队列
   */
    public CircleQueueLink(){
      front = rear = null;
    }
    /**
   * 添加数据到队列
   * @param data
   */
    public void addQueue(int data){
      // 创建新的节点
      LinkNode newNode = new LinkNode(data);
      // 如果队列为空,front和rear都指向新节点;否则,rear指向新节点,新节点指向front(形成循环队列)
      if(front == null){
            front = rear = newNode;
            rear.next = front;
      }else{
            rear.next = newNode;
            rear = newNode;
            rear.next = front;
      }
    }
    /**
   * 获取队列的数据,出队列
   */
    public int getQueue(){
      // 如果队列为空,抛出异常;
      if(front == null){
            throw new RuntimeException("Queue is empty");
      }
      int value = front.data;
      // 如果队列只有一个节点,front和rear都指向null;否则,front指向下一个节点,rear指向front
      if(front == rear){
            front = rear = null;
      }else{
            front = front.next;
            rear.next = front;
      }
      return value;
    }
    /**
   * 显示队列的所有数据
   */
    public void display(){
      LinkNode temp = front;
      if(front == null){
            System.out.println("Queue is empty");
      }else{
            while(temp.next != front){
                System.out.print(temp.data + " ");
                temp = temp.next;
            }
            System.out.print(temp.data);
            System.out.println();
      }
    }
    /**
   * 判断队列是否为空
   * @return
   */
    public boolean isEmpty(){
      return front == null;
    }
    /**
   * 求出当前队列有效数据的个数
   * @return
   */
    public int size(){
      int count = 0;
      LinkNode temp = front;
      if(front == null){
            return 0;
      }else{
            while(temp.next != front){
                count++;
                temp = temp.next;
            }
            count++;
      }
      return count;
    }
    /**
   * 获取队列的数据,不出队列
   * @return
   */
    public int getFront(){
      if(front == null){
            throw new RuntimeException("Queue is empty");
      }
      return front.data;
    }
}

public class CircleQueueLinkDemo{
    public static void main(String[] args) {
      CircleQueueLink maleQueue = new CircleQueueLink();
      CircleQueueLink femaleQueue = new CircleQueueLink();

      // 输入男士和女士的人数
      int m = 2;
      int n = 4;

      // 将男士和女士依次加入队列
      for (int i = 1; i <= m; i++) {
            maleQueue.addQueue(i);
      }
      for (int i = 1; i <= n; i++) {
            femaleQueue.addQueue(i);
      }

      // 输入舞曲的数目
      int k = 6;

      // 配对舞伴
      for (int i = 0; i < k; i++) {
            int male = maleQueue.getQueue();
            int female = femaleQueue.getQueue();
            System.out.println(male + " " + female);
            maleQueue.addQueue(male);
            femaleQueue.addQueue(female);
      }
    }
}

以上是使用数组和链表分别实现的队列,你可以根据自己的需求选择其中一种来实现。希望能帮到你,祝你和孩子学习愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求求各位大佬帮帮忙教教孩子咋写,按照springboot3.0一步一步做的,好人一生平安