Вот на питоне:
[spoiler]#!/usr/bin/env python
# -*- coding: utf-8 -*-
def multi_3_max(list_of_ints):
if not list_of_ints: return 0, ''
if len(list_of_ints) < 4:
res = list_of_ints
else:
res = [0]
list_of_ints.sort(reverse=True)
pos = list_of_ints[:3]
pos = [i for i in pos if i > 0]
list_of_ints.sort()
neg = [i for i in list_of_ints if i <= 0]
if not len(pos):
res = [neg[-1], neg[-2], neg[-3]]
elif len(pos) == 1:
res = [pos[0], neg[0], neg[1]]
elif len(pos) == 2:
if len(neg) > 1:
res = [pos[0], neg[0], neg[1]]
else:
if len(neg) < 2:
res = [pos[0], pos[1], pos[2]]
elif pos[0]*pos[1]*pos[2] > pos[0]*neg[0]*neg[1]:
res = [pos[0], pos[1], pos[2]]
else:
res = [pos[0], neg[0], neg[1]]
op = ''
result = 1
for i in res:
result *= i
if op: op += u' * '
op += str(i)
return result, op
# list_of_ints = [-10, -10, 1, 3, 2]
# print u'Результат: %d операнды %s' % multi_3_max(list_of_ints)
print u'Результат: %d операнды %s' % multi_3_max([-10, 3, 2])
print u'Результат: %d операнды %s' % multi_3_max([-10, -10, 0, 1, 3, 2])
print u'Результат: %d операнды %s' % multi_3_max([-10, 0, 3, 2])
print u'Результат: %d операнды %s' % multi_3_max([-10, 0, 3, 2, -2])
print u'Результат: %d операнды %s' % multi_3_max([-10, 7, 3, 2])
print u'Результат: %d операнды %s' % multi_3_max([-10, 7, 3, 2, -5])
print u'Результат: %d операнды %s' % multi_3_max([-10, -7, -5, -2])
print u'Результат: %d операнды %s' % multi_3_max([-5,-2,-3,2,3,1,0,-1])
print u'Результат: %d операнды %s' % multi_3_max([4,3,-2,0,0])
[/spoiler]
Результат: -60 операнды -10 * 3 * 2
Результат: 300 операнды 3 * -10 * -10
Результат: 0 операнды 3 * -10 * 0
Результат: 60 операнды 3 * -10 * -2
Результат: 42 операнды 7 * 3 * 2
Результат: 350 операнды 7 * -10 * -5
Результат: -70 операнды -2 * -5 * -7
Результат: 45 операнды 3 * -5 * -3
Результат: 0 операнды 4 * -2 * 0
[-10, -10, 0, 1, 3, 2]
1000 раз за 0.00521407050337 мс