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

本文介绍了一种使用C语言实现的小球碰撞模拟算法,通过结构体存储小球状态,循环判断碰撞并调整方向,适用于CSP2018年3月第二题。文章分享了具体代码实现过程,包括输入小球初始位置、检测碰撞、改变方向及边界条件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
    
资源来源于网络,如有侵权,私信立删。 CSP-J/S第一轮时间 CSP-J/S第一轮分为:CSP-J1和CSP-S1。和NOIP第一轮时间一样,CSP-J/S第一轮认证在10月份第三个星期六进行。 CSP-J/S第一轮考察重点 第一轮认证为笔试或机试,主要测试选手有关计算机方面的基本知识,第一轮为资格测试。从2020开始,全部为机试。 CSP-J/S第一轮报名方式 参加CSP-S/J两组两轮认证均须在网上注册报名,注册网站为http://rg.noi.cn。参加认证者必须如实填写个人信息报名,包括但不限于姓名、身份证号、出生日期、性别、就学(学籍学校)/就职单位等,信息一旦注册,不得修改,如有错误,责任自负。 CSP-J/S第一轮认证考点 省认证点由CCF授权的CSP非专业级别省认证组织单位设置。 1、第一轮认证点:由省认证组织单位总负责人设置,每个认证点人数不应少于20人。 2、未经批准的认证点,其认证成绩不予承认。 认证费用 第一轮CSP-S/J组:50元/人(该费用不包括食宿及交通费)。 CSP-J/S第一轮认证试组成 CSP-J/S第一轮在10月份第三个星期六进行,其中CSP-J1认证时间为周六9:30-11:30,CSP-S1认证时间为周六14:30-16:30。考试时长为2小时,内容为笔试或机试(从2020开始全部为机试),满分100分。 试由三部分组成: ① 选择(共15,每2分,共计30分) CSP-S1的前10道为单选,后10道为不定项选择(只有全部选对才得分,否则不得分);CSP-J1的前15道都是单选。 ② 程序阅读理解(共3,共计40分) 目给出一段程序(不一定有关于程序功能的说明),考生通过阅读理解该段程序进行答,分为选择和判断。 ③ 程序完善(共3,共计30分) 目给出一段关于程序功能的文字说明,然后给出一段程序代码,在代码中略去了若干个语句或语句的一部分并在这些位置给出空格,要求考生根据程序的功能说明和代码的上下文,选择对应答案 。三皆为选择
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值