csp碰撞的小球java实现(100分)

csp碰撞的小球java实现(100分)

一、题目:

在这里插入图片描述

二、解题思路:

  • 建立二维数组a[n][3]
  • a[n][0]用于存储小球位置,a[n][1]用于存储小球方向(1为正向,-1则相反)
  • a[n][2] 用于存储小球的插入顺序(题目插入是无序的,我们希望小球位置按照从小到大排列,有了插入顺序就不怕排序后输出顺序被打乱)。

代码:

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();			//读入小球个数
		int L = scanner.nextInt();			//读入线段长度
		int t = scanner.nextInt();			//读入时间
		int[][] a = new int[n][3]; for(int i=0;i<n;i++) { a[i][0] = scanner.nextInt();	//读入初始位置 a[i][1] = 1; //小球初始都为正向运动 a[i][2] = i+1; //存储插入顺序
		} Arrays.sort(a,new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0]-o2[0];			//按照从小到大排列 } }); for(int i=0;i<t;i++) { //循环t次	 for(int j=0;j<n-1;j++) {		//遍历1到n-1个小球,防止越界,看后面 a[j][0] +=a[j][1];			//每个小球移动一个单位 } if(a[n-1][0]==L) { //判断最后一个小球是否到右端点 a[n-1][1] = -1; //改变移动方向 } a[n-1][0] +=a[n-1][1];			//最后一个小球移动一个单位 for(int j =0;j<n-1;j++) {		//遍历是否有小球相撞 if(a[j][0]==a[j+1][0]) { a[j][1] = -1;		//调整两球方向为反方向 a[j+1][1] = 1; } if(a[n-2][0]==a[n-1][0]) {	//判断倒数第1、2球是否相撞 a[n-2][1] = -1; a[n-1][1] = 1; } if(a[0][0]==0) {			//判断第一个球是否达到左端点 a[0][1]=1; } }
		}
		Arrays.sort(a,new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[2]-o2[2];			//按照插入顺序排序 }
		});
		for(int i =0;i<n;i++) { System.out.print(a[i][0] + " ");
		}
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

在这里插入图片描述

欢迎讨论~

文章来源: blog.csdn.net,作者:Kwang0077,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_45762477/article/details/115052872

(完)