解题思路:
用数组a[1000]记录每个球的位置,用数组direction[1000]记录小球的方向的正负性。外循环遍历时间,内循环遍历每个小球位置的更新。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
/*
基本数据的输入操作
*/
int[] direction=new int[100];//记录N个小球的行进方向
int[] a=new int[100];//记录第N个小球的位置
int n,L,t;
Scanner s = new Scanner(System.in);
n=s.nextInt();
L=s.nextInt();
t=s.nextInt();
for(int i=0;i<n;i++)
{
a[i]=s.nextInt();
direction[i]=1;
if(a[i] == L || a[i] == 0)
direction[i] = -direction[i];
}
/*
记录t秒内所有小球的位置状态
*/
for(int i=0;i<t;i++)//外层遍历时间T
{
for(int j=0;j<n;j++)//遍历每个球的运行状态和位置
{
/*
先走再判断是否该改变方向
*/
//1.小球朝相应的方向运行一个单位
a[j]+=direction[j];
//2.判断不同条件是否应该改变方向
//2.1如果小球碰到起点或者终点,改变方向
if (a[j]==L||a[j]==0) {
direction[j] = -direction[j];
}
}
//2.2两两遍历所有小球,如果有两个小球位置相同,这两个小球的位置均发生改变
for(int m=0;m<n;m++)
{
for(int k=m+1;k<n;k++)
{
if(a[m]==a[k])
{
//System.out.println("turn");
direction[m]=-direction[m];
direction[k]=-direction[k];
}
}
}
}
for(int m=0;m<n;m++)
{
System.out.print(a[m]+" ");
}
}
}