CSP 2018年3月第2题 碰撞的小球

CSP 2018年3月第2题 碰撞的小球

  1. emm 填坑,之前 不会写了,然后看网上的也不太懂

    于是 把去年数据结构作业时 写的代码拿出来测了一下,没问题

  2. 使用结构体来存储小球的位置和方向

    循环 t秒 ,依次判断所有的小球,看是否会相碰 (感觉会不会有点复杂,不是相邻的就行了吗,后面再填坑 改吧)

    相碰的话就改变其方向即可

  3. 接着判断 其位置是否走到两边的尽头

    除此之外的情况 就直接沿着对应的方向前进

  4. 下面是源码

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Ball
    {
        int location;
        int direction;         // 1 向 右 ; 0 向 左
    }Ball;
    int main()
    {
        int L,n,t;
        int i,j,time;
        int temp;//用来 交换 两个小球方向
        //printf("输入 n L t  中间用空格 隔开\n");
        scanf("%d %d %d",&n,&L,&t);
    
        Ball ball[n+1];//建立 Ball 类型数组
        for(i=1;i<=n;i++)
        {
            scanf("%d",&ball[i].location);
            ball[i].direction = 1;
        }//输入 小球 初始位置
    
        for(time = 0;time<t;time++)
        {
            for(i=1;i<n;i++)
            {
                for(j=i+1;j<=n;j++)//同其余小球判断 是否相碰
                {
                  if(ball[i].location == ball[j].location)
                  {
                     temp = ball[i].direction;
                     ball[i].direction = ball[j].direction;
                     ball[j].direction = temp;
                  }//小球交换 前进方向
                }
            }
            for(i=1;i<=n;i++)
            {
                if(ball[i].location == L && ball[i].direction == 1)//向右走到尽头
                    ball[i].direction = 0;
                if(ball[i].location == 0 && ball[i].direction == 0)//向左走到尽头
                    ball[i].direction = 1;
                if(ball[i].direction == 1) ball[i].location++;
                else ball[i].location--;
            }
        }
    
        for(i = 1;i<=n;i++)
            printf("%d ",ball[i].location);
    
        return 0;
    }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值