第13次CCF認證第二題
- 大概意思就是一條線上 放有若干個小球,每個都以相同的速度1在朝着某個方向運動
- 碰撞後會反向
- 同一時刻最多隻會有兩個小球相撞 題上有證明我就不說了
- 問某一個時刻 所有球的位置
代碼:
import java.util.Scanner;
public class second
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
String string=scanner.nextLine();
String sd[]=string.split(" ");
int sum[]=transfer(sd);
int ball_number=sum[0];
int linelength=sum[1];
int time=sum[2];
String strball=scanner.nextLine();
int balls[]=transfer(strball.split(" "));
//deal
int position[]=new int [ball_number];
int direction[]=new int [ball_number];
boolean bian[]=new boolean[ball_number];
for (int i = 0; i < bian.length; i++) {
bian[i]=false;
}
//方向
for (int i = 0; i < direction.length; i++) {
direction[i]=1;
}
//位置
for (int i = 0; i < position.length; i++) {
position[i]=balls[i];
}
int now=0;
while(now<time){
now++;
// 新的一輪可以變
for (int i = 0; i < bian.length; i++) {
bian[i]=false;
}
for (int i = 0; i < position.length; i++) {
//變相
if (position[i]==linelength||position[i]==0) {
// System.out.println("撞到牆了"+position[i]);
direction[i]=-direction[i];
}
//相撞變相
for (int j = 0; j < direction.length; j++) {
if (!bian[j]&&i!=j&&position[i]==position[j]){
// System.out.println("Main.main()"+position[i]+position[j]);
direction[i]=-direction[i];
direction[j]=-direction[j];
bian[j]=true;
bian[i]=true;
}
}
}
for (int i = 0; i < position.length; i++) {
position[i]+=direction[i];
}
}
out(position);
}
static void out (int a[]){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
static int[] transfer(String str[]){
int a[]=new int [str.length];
for (int i = 0; i < str.length; i++) {
a[i]=Integer.parseInt(str[i]);
}
return a;
}
}
思路代碼中都給的差不多了,最後的結果也是正確的,希望能幫助到大家。
用一個while循環記錄下每秒鐘所有球的狀態,然後一步一步得到t秒時所有球的狀態。