/********google小问题程序******/
/********作者:xiaocui*********/
/********时间:2007.1.29******/
/********版本:v1.0***********/
#include <iostream>
#include <vector>
using namespace std;
/****找出不是最大乘积组中的那个元素序号****/
int find_index (const vector<int> &ivec)
{
int mul = 1;
for(int i=0; i<ivec.size(); ++i)
{
mul = mul *ivec[i];
}
int index; //返回值
//如果mul为正数
if ( mul > 0 )
{
//记录最小正数的序号
int positive_index = -1;
//记录最小负数的序号
int minus_index = -1;
//记录最小的正数
int positive_num = 10000;
//记录最小的负数
int minus_num = 10000;
for(int i=0; i<ivec.size(); ++i)
{
if( ivec[i]>0 )
{
if(ivec[i]<positive_num)
{
positive_num = ivec[i];
positive_index = i;
}
}
if ( positive_index==-1 && ivec[i] <0 )
{
if ( ivec[i]<minus_num)
{
minus_num = ivec[i];
minus_index = i;
}
}
}
if(positive_index!=-1)
{
index = positive_index;
}
else
{
index = minus_index;
}
}
//如果mul为负数
else if ( mul<0 )
{
//记录最大的负数的序号
int positive_index = -1;
//记录最大的正数的序号
int minus_index = -1;
//记录最大的负数
int positive_num = -10000;
//记录最大的正数
int minus_num = -10000;
for(int i=0; i<ivec.size(); ++i)
{
if ( ivec[i]<0 )
{
if(ivec[i]>minus_num)
{
minus_num = ivec[i];
minus_index =i;
}
}
if (minus_index==-1 && ivec[i]>0)
{
if(ivec[i]>positive_num)
{
positive_num = ivec[i];
positive_index =i;
}
}
}
if ( minus_index!=-1)
{
index = minus_index;
}
else
{
index = positive_index;
}
}
//如果mul为0
else if (mul==0)
{
//针对0的处理(判断0的个数是否超过2)
}
return index;
}
int main()
{
cout <<"请输入数字序列的个数: ";
int n;
cin >>n;
cout <<"请输入数字序列: ";
vector<int> ivec;
for(int i=0; i<n; ++i)
{
int tmp;
cin >>tmp;
ivec.push_back(tmp);
}
cout <<"拥有最大乘积的一组元素是: ";
for(int i=0; i<n; ++i)
{
if( i!= find_index(ivec) )
{
cout <<ivec[i]<<" ";
}
}
cout <<endl;
return 0;
}