问题描述
  数轴上有一条长度为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

思路如下:

每个小球是一个类,分别含有三个属性:方向,位置,编号。然后根据时间的推移对小球的位置进行判断和推移。对小球的属性进行更改。小球存储在list列表中,因为arraylist的查找性能比较强并且有序,将小球信息存储在arraylist中。最后输出球的位置信息。贴一下java代码,欢迎各位大佬批评指正。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class BallMotion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ballCount = sc.nextInt();
int lineLen = sc.nextInt();
int time = sc.nextInt();
List<Ball> ballList = new ArrayList<Ball>();
for (int i = 1; i <= ballCount; i++) {
Ball ball = new Ball(i,1,sc.nextInt());
ballList.add(ball);
}
for(int i = 1; i <= time;i++){
//开始时间循环
for(int j = 0; j< ballList.size(); j++){
//是否在尽头
if(ballList.get(j).getPosition() == lineLen || ballList.get(j).getPosition() == 1){
ballList.get(j).setDirction(-ballList.get(j).getDirection());
}
//是否有球重合
for (int k = 0; k< ballList.size(); k++) {
if( k == j){
continue;
}else{
if (ballList.get(j).getPosition() == ballList.get(k).getPosition()) {
//重合时方向两个球的方向都相反
ballList.get(j).setDirction(-ballList.get(j).getDirection());
ballList.get(k).setDirction(-ballList.get(k).getDirection());
}
} }
// 移动位置
ballList.get(j).setPosition(ballList.get(j).getPosition()+ ballList.get(j).getDirection());
}
}
//打印各个小球位置
for(int i = 0; i < ballCount; i++){
System.out.print(ballList.get(i).getPosition()+" ");;
}
}
} class Ball {
private int id;// 编号
private int direction;// 方向,1右 -1左
private int position;// 位置 public Ball() {
} public Ball(int id, int direction, int position) {
this.id = id;
this.direction = direction;
this.position = position;
} public void setId(int id) {
this.id = id;
} public void setDirction(int direction) {
this.direction = direction;
} public void setPosition(int position) {
this.position = position;
} public int getId() {
return id;
} public int getDirection() {
return direction;
} public int getPosition() {
return position;
} }

最近练习C++,再贴一把C++代码(思路还是没变,没想到过了这么久,思路还是一样的)

#include<iostream>
#include<list> using namespace std;
class ball {
public:
int id;
int direction;//1为右-1为左
int position;//当前位置
};
int main() {
int ballcount, lineLen, time;
cin >> ballcount >> lineLen >> time;
int pos;
list<ball> balist;
for (int i = ; i <= ballcount; i++) {
cin >> pos;
ball b;
b.id = i;
b.direction = ;
b.position = pos;
balist.push_back(b);
}
//开始计算球每个时刻的位置
list<ball>::iterator bit,tempbit;
for (int i = ; i < time; i++) {
for (bit = balist.begin(); bit != balist.end(); bit++) {
//判断是否在尽头
if (bit->position == lineLen || bit->position == ) {
bit->direction = -;
}
//判断是否有球重合
for (tempbit = balist.begin(); tempbit != balist.end(); tempbit++) {
if (bit->id == tempbit->id) {
continue;
}
else {
if (bit->position == tempbit->position) {
bit->direction = -bit->direction;
tempbit->direction = -bit->direction;
}
}
}
//移动球的位置
bit->position = bit->position + bit->direction;
}
}
//打印球的位置
for (bit = balist.begin(); bit != balist.end(); bit++) {
if (bit == balist.begin()) {
cout << bit->position;
}
else {
cout << " " << bit->position;
}
}
system("pause");
return ;
}

CCF认证201803-2 碰撞的小球 java代码实现。的更多相关文章

  1. 201803-2 碰撞的小球 Java

    思路: 直接按照题意模拟,感觉没什么太好的办法.另外注意:int这种基础数据类型不能用equals这个方法 ,必须是Integer类型 import java.util.Scanner; public ...

  2. CCF CSP 201803-2 碰撞的小球

    题目链接:http://118.190.20.162/view.page?gpid=T72 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段 ...

  3. 碰撞的小球 ccf (模拟)

    问题描述 试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐 ...

  4. ccf认证 201709-4 通信网络 java实现

    试题编号:                                                               201709-4 试题名称: 通信网络 时间限制: 1.0s 内 ...

  5. CCF认证历年试题

    CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...

  6. CCF-201803-2 碰撞的小球

    问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒.当小球到达线段 ...

  7. 【web前端学习部落22群】分享 碰撞的小球开源小案例

    对于课程中的疑问,大家可以加 web前端学习部落22群 120342833和其他老师还有众多的小伙伴们进行沟通交流哦,群里还有不少技术大拿.行业大牛 可以一起探讨问题,我们也会安排专业的技术老师为大家 ...

  8. 小明种苹果(续)第十七次CCF认证

    小明种苹果(续)第十七次CCF认证 题目 原题链接 ](http://118.190.20.162/view.page?gpid=T93) 很高心,在现在CCF CSP可以下载自己当时的答卷了,也就是 ...

  9. 【C++】CCFCSP201803-2碰撞的小球

    // // main.cpp // CCFCSP20180318_2_碰撞的小球 // // Created by T.P on 2018/3/24. // Copyright © 2018年 T.P ...

随机推荐

  1. 【Html基础】之<h1>~<h6> <p> <br> <hr>

    学习html无从下手,就在w3school的html手册按着教程学习了下. 什么是html? html是指超文本标记语言,即Hyper Text Markup Language html不是一种编程语 ...

  2. Raspberry Pi - Huawei HiLink E3256 3G modem to ethernet adapter

    Raspberry Pi - Huawei HiLink E3256 3G modem to ethernet adapter This page documents how to configure ...

  3. PHP 中提示undefined index如何解决(多种方法)

    PHP 中提示undefined index如何解决(多种方法) 这篇文章主要介绍了PHP 中提示undefined index如何解决(多种方法)的相关资料,需要的朋友可以参考下 一.相关信息 平时 ...

  4. Android MediaPlayer 和 MediaCodec 的区别和联系(一)

    目录: (1)概念解释 : 硬解.软解 (2)Intel关于Android MediaCodec的相关说明 正文: 一.硬解.软解         (1)概念:                 a.硬 ...

  5. 【Android Studio使用教程1】Android Studio导入项目的几种方法

    本篇教程中使用到的Android Studio版本为1.0, Eclipse ADT版本23.0.4.请尝试更新到该版本. Android Studio默认使用 Gradle 构建项目, Eclips ...

  6. 下面有关css选择器的说法错误的是?

    下面有关css选择器的说法错误的是? .intro --- 选择 class="intro" 的所有元素. #firstname --- 选择 id="firstname ...

  7. 有关从经典部署模型迁移到 Azure Resource Manager 部署模型的常见问题

    此迁移计划是否影响 Azure 虚拟机上运行的任何现有服务或应用程序? 不可以. VM(经典)是公开上市的完全受支持的服务. 你可以继续使用这些资源来拓展你在 Azure 上的足迹. 如果我近期不打算 ...

  8. [翻译] IGLDropDownMenu

    IGLDropDownMenu An iOS drop down menu with pretty animation. 一种iOS点击下拉菜单样式,动画效果很绚丽. Screenshot - 截图 ...

  9. 骑士周游问题跳马问题C#实现(附带WPF工程代码)

    骑士周游问题,也叫跳马问题. 问题描述: 将马随机放在国际象棋的8×8棋盘的某个方格中,马按走棋规则进行移动.要求每个方格只进入一次,走遍棋盘上全部64个方格. 代码要求: 1,可以任意选定马在棋盘上 ...

  10. Lua操作mysql

    require "luasql.mysql" --创建环境对象 env = luasql.mysql() --连接数据库 conn = env:connect("数据库名 ...