1. 问题描述
疫情期间,一定要避免人群聚集,请用计算机程序来模拟: 长100米的跑道上有m个人, 有的面朝左,有的面朝右。每个人都只能沿着跑道走,速度是1m/秒。当两个人碰面时,他们会同时掉头往相反的方向走。这些人中, 有1个人感染了新型冠状病毒。并且在和其它人碰面时,会把冠状病毒传染给碰到的人。请你计算,当所有人都离开跑道时,有多少人感染了新型冠状病毒。
【输入格式】第一行输入一个整数m(1<m<25), 表示总人数。接着的一行是用空格分开的整数Ai (-100<Ai<100), Ai的绝对值表示人距离跑道左边端点的距离。大于零表示面向右, 小于零表示面向左, 数据中不允许出现0值, 也不允许出现两个人占用同一位置。其中,第一个数据代表的人已经携带病毒。
【输出格式】输出为一个整数,代表最后感染了新冠病毒的人数。
【输入样列】
5
-10 8 -2- 12 25
【输出样列】
3
2. 代码实现原理讲解
- 确定总人数、初始位置、这个人是否生病
- 确定离开的感染人数(初始值为0)
- 确定仍然留在跑道上的人数(初始值为总人数)
- 确定循环终止的条件
若感染人数大于等于总人数或者留在跑道上的人数只有1个时程序终止 - 计算当前跑道上最近两个人之间的距离,确定下一次可能有人碰面的时间和每个人移动距离
5.1 获取初始位置值的绝对值
5.2 把当前位置的值(绝对值)从小到大排列
5.3 构造位置的交叉列表
5.4 删除最后一个变量
5.5 通过两个列表相减算距离
5.6 求出最小的距离(不要列表中的第一个值) - 根据5的结果算出每个人将移动的距离,