CCF CSP 201803-2 碰撞的小球(Java-100分)
試題編號: | 201803-2 |
試題名稱: | 碰撞的小球 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述
數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。 當兩個小球撞到一起的時候,兩個小球會分別向與自己原來移動的方向相反的方向,以原來的速度大小繼續移動。 現在,告訴你線段的長度L,小球數量n,以及n個小球的初始位置,請你計算t秒之後,各個小球的位置。 同時也可以證明兩個小球發生碰撞的位置一定是整數(但不一定是偶數)。 輸入格式 輸入的第一行包含三個整數n, L, t,用空格分隔,分別表示小球的個數、線段長度和你需要計算t秒之後小球的位置。 第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。 輸出格式 輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。 樣例輸入 3 10 5 4 6 8 樣例輸出 7 9 9 一秒後,三個小球的位置分別為5, 7, 9。 兩秒後,第三個小球碰到牆壁,速度反向,三個小球位置分別為6, 8, 10。 三秒後,第二個小球與第三個小球在位置9發生碰撞,速度反向(注意碰撞位置不一定為偶數),三個小球位置分別為7, 9, 9。 四秒後,第一個小球與第二個小球在位置8發生碰撞,速度反向,第三個小球碰到牆壁,速度反向,三個小球位置分別為8, 8, 10。 五秒後,三個小球的位置分別為7, 9, 9。 樣例輸入 10 22 30 14 12 16 6 10 2 8 20 18 4 樣例輸出 6 6 8 2 4 0 4 12 10 2 保證所有小球的初始位置互不相同且均為偶數。 |
import java.util.Scanner;
public class Main {
static Ball[] ball = null;
static int time = 0; // 計時(從0開始)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int L = sc.nextInt();
int t = sc.nextInt();
ball = new Ball[n];
for (int i = 0; i < n; i++) {// 例項化
ball[i] = new Ball(sc.nextInt(), 1);
}
go(n, L, t);// 核心處理過程
for (int i = 0; i < n; i++) { // 輸出
if (i == n - 1)
System.out.print(ball[i].pos);
else
System.out.print(ball[i].pos + " ");
}
sc.close();
}
/**
* 模擬執行過程
*
* @param n
* @param L
* @param t
*/
public static void go(int n, int L, int t) {
while (++time <= t) {
for (int i = 0; i < n; i++) {// 到達端點後反向
if (ball[i].dir == 1) {
ball[i].pos++;
if (ball[i].pos == L)
ball[i].dir *= -1; // 使球反向
} else {
ball[i].pos--;
if (ball[i].pos == 0)
ball[i].dir *= -1;
}
}
for (int i = 0; i < n - 1; i++) {// 檢查是否相撞
for (int j = i + 1; j < n; j++) {
if (ball[i].pos == ball[j].pos) {
ball[i].dir *= -1;
ball[j].dir *= -1;
break;
}
}
}
}
}
}
class Ball {
public int pos; // 球的位置
public int dir; // 球的方向,1表示向右,-1表示向左
public Ball(int p, int d) {
this.pos = p;
this.dir = d;
}
}
相關推薦
CCF CSP 201803-2 碰撞的小球(Java-100分)
問題描述 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,
CCF-CSP-201803-2 碰撞的小球
問題描述: 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L
CCF CSP 201709-2 公共鑰匙盒(Java-100分)
問題描述 有一個學校的老師共用N個教室,按照規定,所有的鑰匙都必須放在公共鑰匙盒裡,老師不能帶鑰匙回家。每次老師上課前,都從公共鑰匙盒裡找到自己上課的教室的鑰匙去開門,上完課後,再將鑰匙放回到鑰匙盒中。 鑰匙盒一共有N個掛鉤,從左到右排成一排,用來掛N個教室的鑰匙。
CCF認證201803-2 碰撞的小球 java程式碼實現。
問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。 當兩個小
CCF認證 201803-2 碰撞的小球 (Python)
問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小
csp 201803-2 碰撞的小球
題目 問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速
CCF認證201803-2碰撞的小球
問題描述 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標
[CSP]201712-2 遊戲 暴力+(以此為例)約瑟夫環的遞推
愚蠢的看錯題了。中文讀題能力還不如英文,有待提升。 所以這道題用普通的陣列模擬操作就可以了。總之跟暴力模擬的約瑟夫環沒什麼區別。 可以用next陣列模擬指標做資料結構,但是資料範圍不大的情況下不建議這麼寫,維護一個指標環寫起來還是比較麻煩的。 #include <
CSP201509-4(高速公路)(Java 90分)
問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。 現在,大臣們幫國王擬了一個修高速公路的計劃。看了計劃後,國王發現,有些城市之間可以通過高速公路直接(不經過其他城市)或
CSP201409-2(畫圖)Java 100分)
問題描述 在一個定義了直角座標系的紙上,畫一個(x1,y1)到(x2,y2)的矩形指將橫座標範圍從x1到x2,縱座標範圍從y1到y2之間的區域塗上顏色。 下圖給出了一個畫了兩個矩形的例子。第一個矩形是(1,1) 到(4, 4),用綠色和紫色表示。第二個矩形是(2, 3)到(6,
【CCF 201712-4】行車路線(Dijkstra 80分)
忽略一個條件:可能具有連續的小路,跑一邊裸的迪傑斯特拉演算法,即可拿到80分 注意:邊權可能會爆int,採用long long才可以 #include <iostream> #i
【CCF 201709-4】通訊網路(Warshall 65分)
思路 用warshall演算法求傳遞閉包,之後遍歷鄰接矩陣計算有幾個部門能夠訪問到N個部門 O(n^3),顯然超時,但是程式碼量短,水一點分數還是很值的。 Warshall有兩個版本,其中第一
ccf csp考試201803-2碰撞的小球答案(python實現)
ccfcsp考試201803-2碰撞的小球答案(python實現) n,L,t = list(map(int,input().split())) positions=list(map(int,input().split())) speed = [] for i
201803-2 CCF-CSP模擬試題 碰撞的小球
import java.util.Scanner; public class Main { public static void main(String[] args){ int[] pos = new int[100]; int i
CCF Python題解(100分)201803-2 碰撞的小球
CCF Python題解(100分)201803-2 碰撞的小球 from collections import defaultdict n, L, t = map(int,input().split()) positions = map(int,input().split()) li
CCF 201803-2 碰撞的小球-Python版
問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小
CCF 201803-2 碰撞的小球
剛開始挺沒有思路的,後來在網上看了別人的程式碼,學習了,原作者看到了聯絡我,侵刪。 思路:小球的位置和方向分別用兩個陣列表示,方向向右為正,向左為負,每秒小球位置的變化可用 a[i]+=b[i](陣列a表示小球的位置,陣列b表示小球運動的方向),到達兩端後
CCF 201803-2碰撞的小球【模擬題】
問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小
ccf-csp 201803 第二題碰撞小球
問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。 當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移
CCF Python題庫201803-2碰撞的小球
問題描述 試題編號:201803-2 試題名稱:碰撞的小球 時間限制:1.0s 記憶體限制:256.0MB 問題描述:問題描述 數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在