题目描述
现在有一个数组 stone
表示一系列在同一平面的滚石。stone
中的元素绝对值表示滚石的大小,元素的正负表示滚石滚动的方向,正向右,负向左,且大小不同的滚石滚动的速度相同。 现在滚石在同一时间滚动,滚石相撞,较小的石头被摧毁,如果大小相同则都会被摧毁,两颗滚石方向相同则永远不会相撞。请你输出碰撞后还剩下的滚石。
输入输出格式
输入格式 第一行有一个整数 stoneSize
,表示数组 stone
的大小; 第二行有 stoneSize
个整数,表示数组 stone
的所有元素,每个整数用一个空格隔开。 输出格式 输出还剩下的滚石。
输入输出样例1
输入 3
5 10 -5
输出 5 10
输入输出样例2
输入 2
-10 10
输出 -10 10
关于题目要注意第二个输出样例,负数是向左,正数往右,所以两个不会相撞。
n = int(input())
stone = list(map(int,input().split()))
length = len(stone)+1 #保证第一次进入循环
while length != len(stone): #重复遍历,每一次删除后,看前一个数与后一个是否又形成了相撞关系
length = len(stone)
for i in range(len(stone)-1):
if stone[i]>0 and stone[i+1]<0:
if abs(stone[i]) > abs(stone[i+1]):
stone[i+1] = 0
elif abs(stone[i]) < abs(stone[i+1]):
stone[i] = 0
else:
stone[i] = 0
stone[i+1] = 0
for j in stone: #去除0
if j == 0:
stone.remove(j)
for k in stone:
print(k,end=' ')