• Предмет: Информатика
  • Автор: katyavladova16012019
  • Вопрос задан 7 лет назад


Решите задачу срочно!!! Даю 100 балов.





Задача №111176. Наибольшее произведение трех чисел
В данном списке из ≤105
n

10
5
целых чисел найдите три числа,произведение которых максимально.

Решение должно иметь сложность ()
O
(
n
)
, где
n
- размер списка.

Выведите три искомых числа в любом порядке.

Примеры
входные данные
3 5 1 7 9 0 9 -3 10
выходные данные
10 9 9
входные данные
-5 -30000 -12
выходные данные
-5 -12 -30000

Приложения:

femaolya: скинь ссылку на задачу
katyavladova16012019: https://informatics.msk.ru/mod/statements/view.php?id=4818&chapterid=111176#1

Ответы

Ответ дал: stglupa
1

#include <iostream>

#include <cmath>

using namespace std;

void solve(){

   const long long INF = 1e10;

   long long max1 = -INF, max2 = -INF, max3 = -INF, min1 = INF, min2 = INF, x = INF;

   string s, cur;

   getline(cin, s);

   for(int i = 0; i <= s.length(); i++){

       if(i == s.length() || s[i] == ' '){

           x = stoll(cur);

           if(x > max1){

               max3 = max2;

               max2 = max1;

               max1 = x;

           }

           else if(x > max2){

               max3 = max2;

               max2 = x;

           }

           else if(x > max3){

               max3 = x;

           }

           if(x < min1){

               min2 = min1;

               min1 = x;

           }

           else if(x < min2){

               min2 = x;

           }

           cur.clear();

       }

       else{

           cur += s[i];

       }

   }

   if(max1 * max2 * max3 > max1 * min1 * min2)

       cout << max3 << " " << max2 << " " << max1;

   else

       cout << min1 << " " << min2 << " " << max1;

}

int main() {

   solve();

}


katyavladova16012019: Ох, а можно на питоне?
stglupa: сразу надо было язык указывать) Переписывать мне уже лень. Тут простая идея, сможешь и сама написать: ищешь произведение трех максимумов и сравниваешь с произведением максимума и двух минимумов и в зависимости от того, что больше, те числа и выводишь
katyavladova16012019: a = list(map(int,input().split()))
maxs = []
mins = []
for i in range(3):
if len(a) == 0:
break
maxs.append(max(a))
a.pop(a.index(maxs[-1]))
for i in range(3):
if len(a) == 0:
break
mins.append(min(a))
a.pop(a.index(mins[-1]))
if len(mins) < 2:
print(maxs[0], maxs[1], maxs[2])
else:
if abs(mins[0] + mins[1]) > maxs[1] + maxs[2]:
print(mins[0], mins[1],maxs[0])
else:
print(maxs[0], maxs[1],maxs[2])
katyavladova16012019: Ну вот я так примерно и писала, но пишет частичное решение
katyavladova16012019: a = list(map(int,input().split()))
maxs = []
mins = []
for i in range(3):
if len(a) == 0:
break
maxs.append(max(a))
a.pop(a.index(maxs[-1]))
for i in range(3):
if len(a) == 0:
break
mins.append(min(a))
a.pop(a.index(mins[-1]))
if len(mins) < 2:
print(maxs[0], maxs[1], maxs[2])
else:
if abs(mins[0] + mins[1]) > maxs[1] + maxs[2]:
print(mins[0], mins[1],maxs[0])
else:
print(maxs[0], maxs[1],maxs[2])
Ответ дал: femaolya
1

a = list(map(int,input().split()))

max1, max2, max3 = -1000000000000, -1000000000000, -1000000000000

min1, min2 = 1000000000000, 1000000000000

for i in a:

   if i > max1:

       max3 = max2

       max2 = max1

       max1 = i

   elif i > max2:

       max3 = max2

       max2 = i

   elif i > max3:

       max3 = i

   if i < min1:

       min2 = min1

       min1 = i

   elif i < min2:

       min2 = i

if max1 * max2 * max3 > max1 * min1 * min2:

   print(max3, max2, max1)

else:

   print(min1, min2, max1)

Приложения:

katyavladova16012019: Ну вот я его написала
katyavladova16012019: И на ответе 49 балов
katyavladova16012019: В протоколе есть и не привальные ответы и не правильные формы вывода
femaolya: там не elif i < min1, а просто if i < min1. Попробуй еще раз
katyavladova16012019: Там так и написано, просто тут так знак больше или меньше отображает
femaolya: у тебя в 14 строке elif а надо просто if
katyavladova16012019: Все, спасибо огромное
katyavladova16012019: Прошло
femaolya: да не за что. Я просто переписала решение господина сверху на питон)
femaolya: Поздравляю с тем, что прошло!
Вас заинтересует