CSP201803-02(JAVA)(碰撞的小球)(100分)

import java.util.*;
import static java.lang.System.out;
public class Main
{
	static class JOJO
	{
		int A; //小球编号
		int B; //小球索引
		boolean C=true; //true表示向右,false表示向左
	}
	public static void main(String[] args) 
	{
		Scanner YTY=new Scanner(System.in);
		int n=YTY.nextInt(),L=YTY.nextInt(),t=YTY.nextInt();
		JOJO[] JO=new JOJO[n];
		for(int i=0;i<n;i++) 
		{
			JO[i]=new JOJO();
			JO[i].B=YTY.nextInt();
			JO[i].A=i+1;
		}
		for(int i=0;i<t;i++) //大循环
		{
			
			for(int j=1;j<n;j++) //冒泡排序,根据索引,升序
			{
				for(int z=0;z<n-j;z++) 
				{
					if(JO[z].B>JO[z+1].B) 
					{
						int tmp=JO[z].B;
						JO[z].B=JO[z+1].B;
						JO[z+1].B=tmp;
						tmp=JO[z].A;
						JO[z].A=JO[z+1].A;
						JO[z+1].A=tmp;
						boolean jkl=JO[z].C;
						JO[z].C=JO[z+1].C;
						JO[z+1].C=jkl;
					}
				}
			}

			for(int p=0;p<n-1;p++) //判断两球是否索引相等
			{
				if(JO[p].B==JO[p+1].B) // 判断索引
				{//判断两球左右方向是否相反
					if(JO[p].C==true&&JO[p+1].C==false) 
					{
						JO[p].C=false;
						JO[p+1].C=true;
					}
					else if(JO[p].C==false&&JO[p+1].C==true) 
					{
						JO[p].C=true;
						JO[p+1].C=false;
					}
				}
			}
			
			for(int g=0;g<n;g++) //判断球是否在边界/0或者L
			{
				if(JO[g].B==0&&JO[g].C==false) 
				{
					JO[g].C=true;
				}
				else if(JO[g].B==L&&JO[g].C==true) 
				{
					JO[g].C=false;
				}
			}
			
			for(int h=0;h<n;h++) //运行一次
			{
				if(JO[h].C==true)
				{
					JO[h].B+=1;

				}
				else if(JO[h].C==false) 
				{
					JO[h].B-=1;
				}
			}
		}
		for(int i=1;i<=n;i++) //输出结果
		{
			for(int j=0;j<n;j++) 
			{
				if(JO[j].A==i) 
				{
					out.print(JO[j].B+" ");
					break;
				}
			}
		}
		out.println();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值