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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
#1

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

03.07.2011, 20:57. Просмотров 1394. Ответов 9
Метки нет (Все метки)

Здравствуйте, есть задача
В некотором государстве в обращении находятся банкноты определенных номиналов. Национальный банк хочет, чтобы банкомат выдавал любую запрошенную сумму при помощи минимального числа банкнот, считая, что запас банкнот каждого номинала неограничен. Помогите Национальному банку решить эту задачу.

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

Первая строка входных данных содержит натуральное число 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++
Довольно интересная задача, описал ее как смог, если что неясно по условию, спрашивайте. Используя оператор Switch, задать принцип...

Вылетает программа - C++
Выкидывает после того как вводишь название файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и...

Вылетает программа - C++
Почему-то после запуска вылетает программа. Помогите найти ошибку. Написана в 3 файлах. 1: class Array{ public: ...

Вылетает программа - C++
Доброго времени суток, форумчане! Можете объяснить, почему вылетает программа, не выдавая ошибки(компилируется нормально) ...

Вылетает программа - C++
Здравствуйте Написала программу, ошибок и предупреждений во время компиляции не происходит, программа вылетает при определенных условиях,...

Вылетает программа - C++
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о результатах сдачи зимней сессии: фамилия, шифр группы,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
schdub
2946 / 1290 / 238
Регистрация: 19.01.2009
Сообщений: 3,386
Завершенные тесты: 1
03.07.2011, 21:03 #2
Цитата Сообщение от hepr Посмотреть сообщение
C++
1
vector<int> usingNumbers = * new vector<int>
Цитата Сообщение от hepr Посмотреть сообщение
C++
1
cin >> *new int;
что это ?
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
03.07.2011, 21:04  [ТС] #3
Что бы программа не закрывалась сразу - мой вариант индусского кода
Bers
Заблокирован
03.07.2011, 21:06 #4
Цитата Сообщение от hepr Посмотреть сообщение
мой вариант индусского кода
С таким отношением грех на вылеты жаловаться.
schdub
2946 / 1290 / 238
Регистрация: 19.01.2009
Сообщений: 3,386
Завершенные тесты: 1
03.07.2011, 21:08 #5
Цитата Сообщение от hepr Посмотреть сообщение
Что бы программа не закрывалась сразу - мой вариант индусского кода
C++
1
system("pause");
Добавлено через 45 секунд
Ну а в строке 12 что происходит ?
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
03.07.2011, 21:11  [ТС] #6
Ну а в строке 12 что происходит ?
объявление функции, а следом её описание
schdub
2946 / 1290 / 238
Регистрация: 19.01.2009
Сообщений: 3,386
Завершенные тесты: 1
03.07.2011, 21:13 #7
Цитата Сообщение от hepr Посмотреть сообщение
объявление функции, а следом её описание
хорошо, а какие аргументы у этой функции???
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
03.07.2011, 21:14  [ТС] #8
source это исходное число которое надо разложить, как вы видите функция рекурсивная
а вектор это список уже использованных для разложения чисел
schdub
2946 / 1290 / 238
Регистрация: 19.01.2009
Сообщений: 3,386
Завершенные тесты: 1
03.07.2011, 21:16 #9
Цитата Сообщение от hepr Посмотреть сообщение
next(s);
ну теперь взгляните на строку 51 где вы вызываете эту функцию
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
04.07.2011, 08:23  [ТС] #10
Цитата Сообщение от schdub Посмотреть сообщение
ну теперь взгляните на строку 51 где вы вызываете эту функцию
Ну вроде все ок, s это и есть изначальное значение, которое надо разложить, а в качестве второго аргумента идет тот что по умолчанию - пустой вектор

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

Добавлено через 10 часов 25 минут
Может быть кто решит задание и выложит, что бы я сам сопоставил решения, и чему-нибудь научился!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2011, 08:23
Привет! Вот еще темы с ответами:

Вылетает программа - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct game2048 { int ar; void start() {

Вылетает программа - C++
Вот что пишет: вот код: /*С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой....

Вылетает программа - C++
Здравствуйте еще раз! Сама по себе программа работает корректно, но после вывода информации в консоль, вылетает. #include...

Программа С++ вылетает - C++
Вылетает.Я новичок в с++ подскажите может надо что то дописать? #include &lt;iostream&gt; // Подключение библиотеки потокового ввода/вывода ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.07.2011, 08:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru