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

Программа вылетает (банкомат) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
03.07.2011, 20:57     Программа вылетает (банкомат) #1
Здравствуйте, есть задача
В некотором государстве в обращении находятся банкноты определенных номиналов. Национальный банк хочет, чтобы банкомат выдавал любую запрошенную сумму при помощи минимального числа банкнот, считая, что запас банкнот каждого номинала неограничен. Помогите Национальному банку решить эту задачу.

Формат входных данных

Первая строка входных данных содержит натуральное число n, 0<n<=100. Вторая строка входных данных содержит n различных натуральных чисел x1, x2, ..., xn, не превосходящих 1.000.000. Третья строчка содержит натуральное число S, не превосходящее 5.000.000.

Формат выходных данных

Программа должна найти представление числа S в виде суммы слагаемых из множества {xi}, содержащее минимальное число слагаемых и вывести это представление на экран (в виде последовательности чисел, разделенных пробелами). Если таких представлений существует несколько, то программа должна вывести любое (одно) из них. Если такое представление не существует, то программа должна вывести слово impossible.

Пример

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

5
1 3 7 12 32
40
Выходные данные

1 7 32
Входные данные

5
10 50 100 500 1000
99
Выходные данные

impossible
Заменим пока условие вывода на posible и imposible без вывода, я сделал программу
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
#include "stdafx.h"
#include "iostream"
#include "vector"
 
using namespace std;
 
int n;
int s;
bool isImposible;
vector<int> numbers;
 
void next(int source , vector<int> usingNumbers = * new vector<int>)
{
    if (!isImposible)
    {
        for(int a=numbers.size()-1;a>=0;a--)
        {
            int newSource = s - numbers[a];
            if (newSource==0)
            {
                isImposible = true;
                break;
            }
            if (newSource > 0)
            {
                vector<int> v = usingNumbers;
                v.push_back(newSource);
                next(newSource,v);
            }
        }
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    isImposible = false;
    FILE * file;
    file = fopen("input.txt", "rt");
    fscanf(file, "%d", &n);
    cout << n << endl;
    for (int a=0;a<n;a++)
    {
        int q;
        fscanf(file, "%d", &q);
        numbers.push_back(q);
        cout << q << " ";
    }
    cout << endl;
    fscanf(file, "%d", &s);
    cout << s << endl;
    next(s);
    if (isImposible)
        cout << "Posible!";
    cin >> *new int;
    return 0;
}
Долго искал ошибку, но не нашел, программа вылетает с ошибкой "необработанное исключение" после долгого выполнения
Заранее спасибо за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2011, 20:57     Программа вылетает (банкомат)
Посмотрите здесь:

C++ Программа-банкомат!
программа вылетает. C++
Вылетает программа C++
C++ Вылетает программа
C++ Вылетает программа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
03.07.2011, 21:03     Программа вылетает (банкомат) #2
Цитата Сообщение от hepr Посмотреть сообщение
C++
1
vector<int> usingNumbers = * new vector<int>
Цитата Сообщение от hepr Посмотреть сообщение
C++
1
cin >> *new int;
что это ?
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
03.07.2011, 21:04  [ТС]     Программа вылетает (банкомат) #3
Что бы программа не закрывалась сразу - мой вариант индусского кода
Bers
Заблокирован
03.07.2011, 21:06     Программа вылетает (банкомат) #4
Цитата Сообщение от hepr Посмотреть сообщение
мой вариант индусского кода
С таким отношением грех на вылеты жаловаться.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
03.07.2011, 21:08     Программа вылетает (банкомат) #5
Цитата Сообщение от hepr Посмотреть сообщение
Что бы программа не закрывалась сразу - мой вариант индусского кода
C++
1
system("pause");
Добавлено через 45 секунд
Ну а в строке 12 что происходит ?
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
03.07.2011, 21:11  [ТС]     Программа вылетает (банкомат) #6
Ну а в строке 12 что происходит ?
объявление функции, а следом её описание
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
03.07.2011, 21:13     Программа вылетает (банкомат) #7
Цитата Сообщение от hepr Посмотреть сообщение
объявление функции, а следом её описание
хорошо, а какие аргументы у этой функции???
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
03.07.2011, 21:14  [ТС]     Программа вылетает (банкомат) #8
source это исходное число которое надо разложить, как вы видите функция рекурсивная
а вектор это список уже использованных для разложения чисел
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
03.07.2011, 21:16     Программа вылетает (банкомат) #9
Цитата Сообщение от hepr Посмотреть сообщение
next(s);
ну теперь взгляните на строку 51 где вы вызываете эту функцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2011, 08:23     Программа вылетает (банкомат)
Еще ссылки по теме:

C++ Вылетает программа
Вылетает программа C++
C++ Вылетает программа

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

Или воспользуйтесь поиском по форуму:
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
04.07.2011, 08:23  [ТС]     Программа вылетает (банкомат) #10
Цитата Сообщение от schdub Посмотреть сообщение
ну теперь взгляните на строку 51 где вы вызываете эту функцию
Ну вроде все ок, s это и есть изначальное значение, которое надо разложить, а в качестве второго аргумента идет тот что по умолчанию - пустой вектор

Добавлено через 36 минут
Никто тоже не может найти ошибку((

Добавлено через 10 часов 25 минут
Может быть кто решит задание и выложит, что бы я сам сопоставил решения, и чему-нибудь научился!
Yandex
Объявления
04.07.2011, 08:23     Программа вылетает (банкомат)
Ответ Создать тему
Опции темы

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