csp 碰撞的小球

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解题思路:
用数组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]+" ");
        }

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值