碰撞的小球(100分)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
思路:我的思路是先把题目按时间顺序来拆分,每一秒每个球在的位置算出来。若位置一样相撞的情况用一个变量表方向(d,d=1为正向,d=-1为负向,相撞两球的d同时变号)。

#include <iostream> 
using namespace std;
int n, L,t;
class Point{
	public:
		int d;   /*方向 右(数轴正方向)为正,左为负*/ 
		int x;   /*当前时刻坐标*/ 
	void input();
	void ifpole();
	void move();
};
void Point::input(){
	cin>>x;
	d=1;
}
                                                                                
void Point::ifpole(){
	if(x==0||x==L)
	  d=-d;  
}
void Point::move(){
	x=x+d;
}
const int NUM=101;
Point p[NUM];
int main(){
	
	cin>>n>>L>>t;
	for(int i=0; i<n; i++)
       p[i].input();
    while(t--){
    	for(int i=0; i<n; i++)
    	  { p[i].move();
		    int k=i;
    	  	p[i].ifpole();
    	   for(int j=0; j<n; j++)  	
    	      { if(k!=j)
			       {if(p[i].x==p[j].x){
    	      			p[i].d=-(p[i].d);
    	      			p[j].d=-(p[j].d);}
				    }else continue;
               } 
          }
                           	}    
       
   	for(int i=0; i<n; i++)
       cout<<p[i].x<<" ";  
       

return 0;	
}

在这里插入图片描述
有一个小点,一开始我用了类函数
void Point::ifhit(Point p1){
if(x==p1.x)
{
d=-d;
p1.d=-(p1.d);
}
} 来运算相撞情况,两个球方向变号。不可以。因为当main函数里调用ifhit时,p1的值改不了。原因是形参不能改变。
我懒得用指针,所以就干脆不用类函数,直接用代码。
我又要去观摩学习一下别人怎么写的啦嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值