【CSP】【Java】学生排队

问题描述

体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。
  例如,下面给出了一组移动的例子,例子中学生的人数为8人。
  0)初始队列中学生的学号依次为1, 2, 3, 4, 5, 6, 7, 8;
  1)第一次调整,命令为“3号同学向后移动2”,表示3号同学出队,向后移动2名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 5, 3, 6, 7, 8;
  2)第二次调整,命令为“8号同学向前移动3”,表示8号同学出队,向前移动3名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 5, 8, 3, 6, 7;
  3)第三次调整,命令为“3号同学向前移动2”,表示3号同学出队,向前移动2名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 3, 5, 8, 6, 7。
  小明记录了所有调整的过程,请问,最终从前向后所有学生的学号依次是多少?
  请特别注意,上述移动过程中所涉及的号码指的是学号,而不是在队伍中的位置。在向后移动时,移动的距离不超过对应同学后面的人数,如果向后移动的距离正好等于对应同学后面的人数则该同学会移动到队列的最后面。在向前移动时,移动的距离不超过对应同学前面的人数,如果向前移动的距离正好等于对应同学前面的人数则该同学会移动到队列的最前面。
输入格式
  输入的第一行包含一个整数n,表示学生的数量,学生的学号由1到n编号。
  第二行包含一个整数m,表示调整的次数。
  接下来m行,每行两个整数p, q,如果q为正,表示学号为p的同学向后移动q,如果q为负,表示学号为p的同学向前移动-q。
输出格式
  输出一行,包含n个整数,相邻两个整数之间由一个空格分隔,表示最终从前向后所有学生的学号。

样例输入

8
3
3 2
8 -3
3 -2

样例输出

1 2 4 3 5 8 6 7

评测用例规模与约定

对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移动均合法。

代码如下

package _2_07_学生排队;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();//人数
		int k = scanner.nextInt();//调整次数
		
		//记录调整的二位数组
		int[][] matrix = new int[k][2];
		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < 2; j++) {
				matrix[i][j] = scanner.nextInt();
			}
		}
		//人数数组
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = i+1;
		}
		
		for (int i = 0; i < k; i++) {//循环所有的调整次数
			for (int j = 0; j < arr.length; j++) {//对数组里的所有元素循环
				//当等于第一个元素并且大于0的时候是前进
				if(arr[j] == matrix[i][0] && matrix[i][1] >= 0){
					//循环的次数实际上是输入的二维数组的第二位数字,大于0时加,小于0时减
					for (int j2 = j; j2 < j+matrix[i][1];j2++) {
						arr[j2] = arr[j2+1];
					}
					arr[j+matrix[i][1]] = matrix[i][0];
					break;
				}
				//当等于第一个元素并且小于0的时候是后退
				if(arr[j] == matrix[i][0] && matrix[i][1] < 0){
					for (int j2 = j; j2 > j+matrix[i][1];j2--) {
						arr[j2] = arr[j2-1];
					}
					arr[j+matrix[i][1]] = matrix[i][0];
					break;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		
	}
}

发布了81 篇原创文章 · 获赞 13 · 访问量 2369

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104716458
今日推荐