/*
* 星球爆炸
* 要求:正数表示星球向右飞,负数表示星球向左飞
* 相撞:两星球向相反的方向飞会相撞,绝对值小的会爆炸
* 不会相撞:两星球向相反的方向飞不会相撞
*/
#include <stdio.h>
#include <math.h>
//planet[]存放星球,length是星球数组大小,arr是最后剩余的星球
void planetBomb(int *planet,int length)
{
int count = 0;//计数撞毁的星球
for (int pre = 0; pre < length; ++pre) {
for (int next = pre + 1; next < length; ++next) {
if (planet[pre] * planet[next] < 0) {//两星球方向不同时
if (planet[pre] < 0) {//pre向左,next向右,不会相撞
continue;
} else if (planet[pre] > 0) {//pre向右,next向左,会相撞
if (planet[pre] + planet[next] == 0) {//两星球质量相等
planet[pre] = 0;
planet[next] = 0;
count += 2;//计数
break;
} else if (abs(planet[pre]) < abs(planet[next])) {//pre质量小
planet[pre] = 0;
count++;//计数
break;
} else if (abs(planet[pre]) > abs(planet[next])) {//pre质量大
planet[next] = 0;
count++;//计数
continue;
}
} else{//planet[pre] == 0时
count++;//计数
break;
}
} else{
continue;
}
}
}
//把planet数组复制到arr
for (int i = 0; i < length; ++i) {
if(planet[i]){
printf("%d ",planet[i]);
}
}
}
int main() {
int planet[7] = {2,-5,3,-3,6,8,-6};
planetBomb(planet, 7);
return 0;
}