Форум программистов, компьютерный форум CyberForum.ru

С++ задача (исправить ошибку в коде) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ помогите написать функцию слияния списков http://www.cyberforum.ru/cpp-beginners/thread969799.html
#include <iostream> #include <conio.h> using namespace std; struct Node { int a; Node *next; Node(int a1){
C++ Начало работы в С++ Какую среду для С++ использовать, чтоб был хороший компилятор? как установить и начать работать? Пожалуиста, сразу ссылки. Windows 7 (64) http://www.cyberforum.ru/cpp-beginners/thread969798.html
Реализовать рекурсию C++
Доброго времени суток! Никак не пойму как это сделать, хотябы направьте меня, что бы самому додумать Пусть в алгебраической записи выражения имеется одна операция - умножения, обозначаемая обычным способом(два множителя записаны друг за другом).Выражение состоит их строки символов и скобок "()", "","{}". Написать программу(рекурсивную), которая выполняет проверку на соответствие открывающихся и...
Разработать приложение, реализующее следующие функции C++
Разработать приложение, реализующее следующие функции:  Выделяет всю доступную процессу память  Освобождает всю выделенную память  Определяет количество выделенной памяти  Определяет время выделения памяти  Определяет время освобождения памяти Память необходимо выделять функциями HeapAlloc и malloc блоками по 18 кб. Выручайте, ребят...
C++ Автоопределение длины строки http://www.cyberforum.ru/cpp-beginners/thread969770.html
char f; cout<<"Vvedite stroku->; cin>>f; Как заставить компилятор определять длину строки, чтобы не тратить зря память, выделяя ее на избыточное количество элементов? Чтобы как бы одновременно определялась длина строки, и автоматически выделялось необходимое количество память?
C++ принадлежит ли заданная точка области Определить, принадлежит ли заданная точка с координатами (х,у) заштрихованной области. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) { setlocale(LC_CTYPE, "Russian"); подробнее

Показать сообщение отдельно
Alexdemath
 Аватар для Alexdemath
125 / 122 / 6
Регистрация: 11.04.2010
Сообщений: 253
07.10.2013, 03:51     С++ задача (исправить ошибку в коде)
AlisherIITU, в задаче буквально написано:

"If more that one variant exists, output any of them."

То есть для {3,5,1,7,9,0,9,-3,10} в ответ можно записать {9,10,9} или {9,9,10} или {10,9,9},
а для {-5,-300,-12} - {-5,-300,-12} или {-300,-5,-12} или {-300,-12,-5}.

Вот вариант решения задачи:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
int main()
{
    int a[9] = {3, 5, -9, 7, 8, 0, 1, -3, -10},
        n = 9, x, y;
 
    for (int i = 0; i < n; i++) cout << a[i] << " ";
 
    for (int i = 0; i < n; i++)   // Sort (up)
     { int min = i;
       for (int j = i+1; j < n; j++)
        { if (a[j] < a[min]) min = j; }
       if (min != i)
        { int temp = a[i]; a[i] = a[min]; a[min] = temp; }
     }
 
    if (a[0]*a[1] > a[n-1]*a[n-2])
      { x = a[0];   y = a[1]; }
    else
      { x = a[n-3]; y = a[n-2]; }
 
    cout << "\n\nThree numbers whose product is maximum:\n\n";
    cout << x << " " << y << " " << a[n-1] << "\n" << endl;
    return 0;
}
Добавлено через 42 минуты
забыл одно условие дописать

строку 19 замените на

C++
1
  if (a[0]*a[1] > a[n-1]*a[n-2] && a[n-1] > 0)
Добавлено через 2 часа 28 минут
ещё одно условие в этой строке

строку 19 замените на

C++
1
if (a[0] < 0 && a[n-1] > 0 && a[0]*a[1] > a[n-1]*a[n-2])
Добавлено через 2 часа 39 минут
Вот более эффективное решение (без сортировки со сложностью алгоритма ~O(n))
вроде все случаи учёл)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
 
int main()
{
    int a[9] = {3, 5, -9, 7, 8, 0, 1, -3, -10},
        n = 9;
 
    for (int i = 0; i < n; i++) cout << a[i] << " ";
 
    for (int i = 0; i < 2; i++)       // Переносим в начале массива
     { int k = i;                     //  2 минимальных элемента (время ~O(n))
       for (int j = i+1; j < n; j++)
        { if (a[j] < a[k]) k = j; }
       int t = a[i]; a[i] = a[k]; a[k] = t;
     }
 
    for (int i = n-1; i >= n-3; i--)  // Переносим в конец массива
     { int k = i;                     //  3 максимальных элемента (время ~O(n))
       for (int j = i-1; j >= 0; j--)
        { if (a[j] > a[k]) k = j; }
       int t = a[i]; a[i] = a[k]; a[k] = t;
     }
 
    int x = a[n-3], y = a[n-2];
 
    if (a[0] < 0 && a[n-1] > 0 && (a[0]*a[1] > a[n-2]*a[n-3]))
     { x = a[0]; y = a[1]; }
 
    cout << "\n\nThree numbers whose product is maximum:\n\n";
    cout << x << " " << y << " " << a[n-1] << "\n" << endl;
 
    return 0;
}
 
Текущее время: 22:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru