CSP-201803-2 碰撞的小球

Posted amtop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP-201803-2 碰撞的小球相关的知识,希望对你有一定的参考价值。

这道题我在csp考试时候,当时没有做出来,当时没用debug,不知道怎么错的。

今天重新做一次,发现memset我用错了。

memset只能置0或者-1,其他的要用for循环进行。

题目思路:

这个题还是挺简单的。既然球一开始不会重合,只要判断某个位置上有两个球的时候,就改变这两个球的方向。

如果在边缘,也要改变方向,这样使得球可以正常移动。

用一个循环表示时间的流逝,遍历每一个球。

 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n, L, t;//小球的个数、线段长度和t秒
 9     cin>>n>>L>>t;
10     int location[n+1];
11     int direction[n+1];
12     int LL[L];
13 
14     memset(LL,0,L*sizeof(int));
15 
16     for(int i=0; i<n; i++)
17         direction[i]=1;
18 
19     for(int i=0; i<n; i++)
20     {
21         cin>>location[i];
22         LL[location[i]]++;
23     }
24     //memset(direction,1,sizeof(int));
25 
26     for(int j=0; j<t; j++)
27     {//每一个时间
28         for(int i=0; i<n; i++)
29         {//对于每一个球
30             //先判断边缘问题
31             LL[location[i]]--;
32             location[i] += direction[i];
33             LL[location[i]]++;
34         }
35         for(int i=0; i<n; i++)
36         {//对于每一个球
37             //判断边缘
38             if(location[i] == L && direction[i] == 1)
39                 direction[i]=-1;
40             if(location[i] == 0 && direction[i] == -1)
41                 direction[i]=1;
42 
43             if(LL[location[i]] == 2)
44                 direction[i]*=int(-1);
45         }
46     }
47 
48     //output
49     for(int i=0; i<n; i++)
50     {
51         cout<<location[i];
52         if(i!=n-1)
53             cout<< ;
54     }
55     cout<<endl;
56 }

 

以上是关于CSP-201803-2 碰撞的小球的主要内容,如果未能解决你的问题,请参考以下文章

js实现小球的弹性碰撞。

HTML5 Canvas彩色小球碰撞运动特效

java实现小球碰撞反弹

Pygame碰撞检测

1-2018-3-2小球碰撞

小球碰撞