CCF认证201803-2碰撞的小球

题目描述

CCF认证201803-2碰撞的小球

算法设计+题目分析

分析题目:

1、读入所有数据,初试化每个小球的位置、方向、是否改变过方向;
2、在每一秒,先判断小球的方向是否发生了变化,如果发生了变化,就重置小球的方向(变化条件是:触边、碰撞);
3、根据当前的所有小球的参数,走一步;
4、循环2、3至时间结束;
5、打印所有小球的位置。

注意点+记录点

代码(100分)

环境
Visual C++6.0

#include <iostream>

using namespace std;
int pos[101][3];
int main()
{
	int n, L, T;
	cin>>n;//小球数目
	cin>>L;//线段长度
	cin>>T;//要求的时间
	for (int i=0; i<n; i++)
	{
		cin>>pos[i][0];//小球位置
		pos[i][1]=1;//小球方向
		pos[i][2]=0;//flag,使得只存在两个小球相撞,小球每一步只改变一次运动方向
	}

	for (int t=0; t<T; t++)
	{
		for (int i=0; i<n; i++)
		{
			if (pos[i][0]==L || (pos[i][0]==0 && t != 0))//到了边界,小球反向运动
			{
				pos[i][1]=-1*pos[i][1];
			}
			for (int j=i; j<n; j++)
			{
				if (pos[i][0]==pos[j][0])//判断是否有小球相撞,同时只允许小球改变一次运动方向
				{
					if (pos[i][2]==0)
					{
						pos[i][2]==1;
						pos[i][1]=-1*pos[i][1];
					}
					if (pos[j][2]==0)
					{
						pos[j][2]==1;
						pos[j][1]=-1*pos[i][1];
					}
				}
			}
		}
		for (int iii=0; iii<n; iii++)//所有小球运动一步
		{
			pos[iii][0] +=pos[iii][1];
			pos[iii][2]==0;
		}
		
	}
	for (int ii=0; ii<n; ii++)
	{
		cout<<pos[ii][0]<<" ";
	}
	return 0;
}

感谢链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值