求求各位大佬帮帮忙教教孩子咋写,按照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) {
// 作业代码实现在这里
}
}
首先,我们需要理解题目的要求。
题目要求模拟舞伴配对问题,舞会开始时,男士和女士各自排成一队,每次从男队和女队的队头各出一个人配成舞伴。如果男队和女队初始人数不相同,则较长的队伍中未配对者等待下一轮舞曲。
我们可以使用队列来模拟这个过程。我们分别创建一个队列来存放男士和女士,每个队列中的元素表示一个人。
接下来,我们根据题目要求编写代码。
首先是使用数组实现的队列:
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]