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

Турист ( найти ошибку ). Вариант задачи о рюкзаке - C++

Восстановить пароль Регистрация
 
Melvil
 Аватар для Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 246
09.07.2015, 20:21     Турист ( найти ошибку ). Вариант задачи о рюкзаке #1
Всем привет, решал задачу, но всё-таки где-то допустил ошибку, подскажите где. Спасибо.

Кликните здесь для просмотра всего текста
Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая из них весит a1 килограмм и вмещает b1 человек, вторая весит a2 килограмм и вмещает b2 человек, третья весит a3 килограмм и вмещает b3 человек.

В классе Гены K человек. Выясните, может ли он выбрать палатки так, чтобы в них все могли поместиться. При этом учитывайте, что выбранные палатки должны суммарно весить не более W килограмм.

Входные данные

Первая строка входного файла INPUT.TXT содержит два целых числа: K и W (1 <= K <= 15, 1 <= W <= 30). Вторая строка содержит шесть целых чисел: a1, b1, a2, b2, a3, b3 (1 <= a1, a2, a3 <= 10, 1 <= b1, b2, b3 <= 15).

Выходные данные

В выходной файл OUTPUT.TXT выведите YES, если палатки указанным образом выбрать можно, и NO в противном случае.


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
#include <iostream>
using namespace std;
int K, W, a1, b1, a2, b2, a3, b3;
void check()
{
    if (b1 + b2 >= K && a1 + a2 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b3 >= K && a1 + a3 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b2 + b3 >= K && a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b2 + b3 >= K && a1 + a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
}
int main()
{
    cin >> K >> W;
    cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
    if (b1 + b2 + b3 >= K)
    {
        check();
    }
        cout << "NO" << endl;
        return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
09.07.2015, 20:27     Турист ( найти ошибку ). Вариант задачи о рюкзаке #2
Хм, а если, например, все люди влезут в одну палатку?
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
09.07.2015, 20:29     Турист ( найти ошибку ). Вариант задачи о рюкзаке #3
Цитата Сообщение от Melvil Посмотреть сообщение
решал задачу, но всё-таки где-то допустил ошибку, подскажите где. Спасибо.
Это снова я. Для начала что должно вывести. И почему вы считаете, что здесь ошибка.

Добавлено через 1 минуту
У вас в main по любому должен быть else иначе после выполнения check() на экране получите NO.
Melvil
 Аватар для Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 246
09.07.2015, 20:30  [ТС]     Турист ( найти ошибку ). Вариант задачи о рюкзаке #4
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
У вас в main по любому должен быть else иначе после выполнения check() на экране получите NO.
Если будет YES, то сработает exit(0). Но вот про 1 палатку я не подумал.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
09.07.2015, 20:31     Турист ( найти ошибку ). Вариант задачи о рюкзаке #5
Следующий тест, программа скорей всего не пройдёт:
Код
1 10
3 10 15 20 15 30
Melvil
 Аватар для Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 246
09.07.2015, 21:11  [ТС]     Турист ( найти ошибку ). Вариант задачи о рюкзаке #6
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Следующий тест, программа скорей всего не пройдёт:
Вы правы, буду корректировать.

Добавлено через 13 минут
Все тесты пройдены, всем спасибо. Код:

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
#include <iostream>
using namespace std;
int K, W, a1, b1, a2, b2, a3, b3;
void check()
{
    if (b1 + b2 >= K && a1 + a2 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b3 >= K && a1 + a3 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b2 + b3 >= K && a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b2 + b3 >= K && a1 + a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 >= K && a1 <= W)
    {
        cout << "YES" << endl;
        exit(0);
    }
    else if (b2 >= K && a2 <= W)
    {
        cout << "YES" << endl;
        exit(0);
    }
    else if (b3 >= K && a3 <= W)
    {
        cout << "YES" << endl;
        exit(0);
    }
 
}
int main()
{
    cin >> K >> W;
    cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
    if (b1 + b2 + b3 >= K)
    {
        check();
    }
        cout << "NO" << endl;
        return 0;
}
Yandex
Объявления
09.07.2015, 21:11     Турист ( найти ошибку ). Вариант задачи о рюкзаке
Ответ Создать тему
Опции темы

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