一、题目背景
时间之流
题目描述:
每个人的时间长河里面,都有几个重要的关键时间点,
以数字的形式呈现在长河之中,当每个人的这些数字都聚集在一起的时候,
就汇聚成了一条庞大的时间之流。
而你们的任务就是在这满是时间数字的流之中,
选定部分时间数字相乘,并使其乘积最终的结果最大。
注意:时间数字之中可能会出现负数及0,他们代表一些人想要忘却的时间点。
由于时间的严谨,所有时间数字已经按照从小到大顺序升序排列。
输入格式:
第一行输入数N,表示有N个时间数字
第二行输入N个整数。
输出格式:
输出仅一行,即最大的乘积。
样例输入:
4
1 2 3 4
样例输出:
24
二、代码
思路:无须大量if else 将过程抽象出来 只看结果
与网络上其他几个答案相比,这样做清晰很多
#include <iostream>
using namespace std;
long long N,ret=0,last_neg=1,temp;
int main() {
cin>>N;
for (int i=0;i<N;++i) {
cin>>temp;
if (temp>0){
ret=ret==0?temp:ret*temp;
}
else if(temp<0){
if(last_neg>0){
last_neg=temp;
continue;
}
ret=ret==0?temp*last_neg:ret*temp*last_neg;
last_neg=1;
}
}
ret=N<2?last_neg:ret;
cout<<ret;
}