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

Поместить элементы в числовой массив - C++

Восстановить пароль Регистрация
 
MihaniX
 Аватар для MihaniX
134 / 44 / 1
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.12.2013, 00:04     Поместить элементы в числовой массив #1
Здравствуйте!
В С/С++ я новичек;
Раньше изучал командную строку виндовс, потом питон (до сих пор учу) а еще начал С и С++

В общем задача такая:

Дано N целых чисел. Требуется выбрать из них три таких числа, произведение которых максимально.
Формат входных данных
Во входном файле записано сначала число N — количество чисел в последовательности (3≤N≤106). Далее записана сама последовательность: N целых чисел, по модулю не превышающих 30000.
Формат выходных данных
В выходной файл выведите три искомых числа в любом порядке. Если существует несколько различных троек чисел, дающих максимальное произведение, то выведите любую из них.

Я решал ее на питон, но на половине тестов не хватает времени и памяти, решил писать на си.

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
35
36
37
38
39
40
41
42
43
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    long long int numbers;
    cin>>numbers;
 
    int nums[numbers];
    cin>>numbers;
 
    long long int minimum=-27000000000001;
    long int first, second, third;
 
    first=0;
    second=0;
    third=0;
 
    for (long long int alpha=numbers; alpha>0; alpha--)
    {
        for (long long int beta=numbers; beta>0; beta--)
            if (!(alpha==beta))
        {
            for (long long int gamma=numbers; gamma>0; gamma--)
                if ((!(alpha==beta))&&(!(beta==gamma)))
                {
                    if (nums[alpha]*nums[beta]*nums[gamma]>minimum)
                    {
                        first=nums[alpha]
                        second=nums[beta]
                        third=nums[gamma]
                    }
                }
        }
    }
 
 
    cout<<first<<'\n'<<second<<'\n'<<third<<endl;
 
    cin.get();
    return 0;
}
C++
1
2
    int nums[numbers];
    cin>>numbers;
Проблема в этом вроде бы.

Я не знаю как эти чиселки в массив запихнуть...

Подскажите, пожалуйста...

Добавлено через 35 минут
Up.

Что-то все игнорят... Подскажите пожалуйста!

Добавлено через 37 минут
Up!
ыыыыы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 00:04     Поместить элементы в числовой массив
Посмотрите здесь:

C++ Вывести элементы числовой последовательности и их количество
C++ Числовой массив
Поместить в новый массив одинаковые элементы исходных C++
Из числовой последовательности найти удалить элементы C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
19.12.2013, 00:12     Поместить элементы в числовой массив #2
Доброй ночи. Если это входной файл. То:
открыть файл для чтения FILE *p=fopen(path,"r")
считывать по одному элементу char c=getc(p). и сравнивать с чем-то(например поставить точку в том месте откуда начать их считывать).
между элементами будут запятые - напишешь условие if(c==',') continue//след итерация при попадание на ,
и кстати если у Вас файл то : int main(int argc, char* argv[]) - необязательно
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
19.12.2013, 00:16     Поместить элементы в числовой массив #3
При таком ограниченном числе чисел можно на этапе компиляции задать размер массива. т.е. сделать что-то вроде
C++
1
2
3
const int NUMS_SIZE = 106;
int nums[NUMS_SIZE];
cin >> numbers;
// тот же самый код

Добавлено через 1 минуту
Ну и ввод массива осуществить примерно таким образом:
C++
1
2
3
4
for (int i = 0; i < numbers; ++i)
{
    cin >> nums[i];
}
MihaniX
 Аватар для MihaniX
134 / 44 / 1
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.12.2013, 12:02  [ТС]     Поместить элементы в числовой массив #4
ОК, Спасибо!
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
19.12.2013, 12:08     Поместить элементы в числовой массив #5
Тут больше миллиарда операций получается на твоем алгоритме. Алгоритм неправильный!

Добавлено через 1 минуту
Сортни этот массив по возрастанию и выбери максимум из произведения трех максимальных элементов (будут стоять в конце массива), и произведения двух минимальных (будут стоять в начале массива) и максимального
MihaniX
 Аватар для MihaniX
134 / 44 / 1
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.12.2013, 19:12  [ТС]     Поместить элементы в числовой массив #6
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    long long int numbers;
    cin>>numbers;
 
    int nums[numbers];
    for (int c=0; c<numbers; c++)
    {
        cin>>nums[c];
    }
 
    long long int minimum=-27000000000001;
    long int first, second, third;
 
    first=0;
    second=0;
    third=0;
 
    long long int maximum=minimum;
    long long int maximum2=minimum;
    long long int maximum3=minimum;
 
    for (int i=0; i<numbers; i++)
    {
        if (nums[i]>maximum)
        {
            maximum=nums[i];
        }
    }
 
    for (int i=0; i<numbers; i++)
    {
        if ((nums[i]>maximum2)&&(nums[i]<maximum))
        {
            maximum2=nums[i];
        }
    }
 
    for (int i=0; i<numbers; i++)
    {
        if ((nums[i]>maximum3)&&(nums[i]<maximum2))
        {
            maximum3=nums[i];
        }
    }
 
    long long int minimum1=maximum;
    long long int minimum2=maximum;
 
    for (int C=0; C<numbers; C++)
    {
        if (nums[C]<minimum1)
        {
            minimum1=nums[C];
        }
    }
 
    for (int C=0; C<numbers; C++)
    {
        if ((nums[C]<minimum2)&&(nums[C]>minimum1))
        {
            minimum2=nums[C];
        }
    }
 
    if ((maximum*maximum2*maximum3)>(minimum1*minimum2))
    {
        first=maximum;
        second=maximum2;
        third=maximum3;
    } else {
        first=minimum1;
        second=minimum2;
        third=maximum;
    }
 
    cout<<first<<" "<<second<<" "<<third<<endl;
 
    return 0;
}
Вот. Я нашел 3 наибольших и 2 наименьших. Оно прошло 30/60 тестов. С временем работы все ок. Но ответы неправильные...

Добавлено через 8 минут
Видимо надо другой алгоритм придумать....

Добавлено через 3 минуты
Хотя мне кажется что этот алгоритм правильный
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
19.12.2013, 20:30     Поместить элементы в числовой массив #7
MihaniX, а ты не находишь одно число несколько раз? Или если есть несколько одинаковых минимальных (или максимальных) чисел, ты найдешь их все?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 00:06     Поместить элементы в числовой массив
Еще ссылки по теме:

Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы C++
Изменить заданный числовой массив так, чтобы элементы были расположены в нем в обратном порядке C++
C++ Поместить элементы массива в очередь

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MihaniX
 Аватар для MihaniX
134 / 44 / 1
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
20.12.2013, 00:06  [ТС]     Поместить элементы в числовой массив #8
Упс.... я дурак...

Пошел переписывать...

Добавлено через 2 часа 10 минут
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    long long int numbers;
    cin>>numbers;
 
    int nums[numbers];
    for (int c=0; c<numbers; c++)
    {
        cin>>nums[c];
    }
 
    long long int minimum=-27000000000001;
    long int first, second, third;
 
    first=0;
    second=0;
    third=0;
 
    long long int maximum=minimum;
    long long int maximum2=minimum;
    long long int maximum3=minimum;
 
    unsigned long long int a, b, c, d, e;
 
    for (int i=0; i<numbers; i++)
    {
        if (nums[i]>maximum)
        {
            maximum=nums[i];
            a=i;
        }
    }
 
    for (int i=0; i<numbers; i++)
    {
        if ((nums[i]>maximum2)&&(!(a==i)))
        {
            maximum2=nums[i];
            b=i;
        }
    }
 
    for (int i=0; i<numbers; i++)
    {
        if ((nums[i]>maximum3)&&(!(a==i))&&(!(b==i)))
        {
            maximum3=nums[i];
            c=i;
        }
    }
 
    long long int minimum1=maximum;
    long long int minimum2=maximum;
 
    for (int C=0; C<numbers; C++)
    {
        if (nums[C]<minimum1)
        {
            minimum1=nums[C];
            d=C;
        }
    }
 
    for (int C=0; C<numbers; C++)
    {
        if ((nums[C]<minimum2)&&(!(C==d)))
        {
            minimum2=nums[C];
            e=C;
        }
    }
 
    if ((maximum*maximum2*maximum3)>(minimum1*minimum2*maximum))
    {
        first=maximum;
        second=maximum2;
        third=maximum3;
    } else {
        first=minimum1;
        second=minimum2;
        third=maximum;
    }
 
    cout<<first<<" "<<second<<" "<<third<<endl;
 
    return 0;
}
О да!

РЕШИЛ!!!
Yandex
Объявления
20.12.2013, 00:06     Поместить элементы в числовой массив
Ответ Создать тему
Опции темы

Текущее время: 10:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru