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

Банкомат - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Лицензия и пробный период http://www.cyberforum.ru/cpp-beginners/thread1031977.html
Здравствуйте, хотелось бы узнать как реализовать пробный период а так же проверку лицензионного ключа на С++. Получил лабораторную работу в которой необходимо написать программу которая бы давала...
C++ Работа со строками в C++ Возникла пара вопросов (только начинаю осваивать С++) Тут ниже задание: Задание 8 При вводе текста программа автоматически должна осуществлять перенос слов. Производится подсчет введенных... http://www.cyberforum.ru/cpp-beginners/thread1031975.html
Сформировать двумерный массив. Удалить из него все строки в которых встречается заданое слово C++
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <limits.h> #define ROWS 100 #define COLS 100 int delete_stroka(int** arr,int N,int M); int main(void) { int sum = 0;
Требуется написать программу для расчета по двум формулам C++
Требуется написать программу для расчета по двум формулам
C++ Полиморфизм http://www.cyberforum.ru/cpp-beginners/thread1031937.html
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое полиморфизм. Можно ли как-то просто и доступно объяснить что такое полиморфизм, как его использовать,...
C++ Прокрутка изображения клавишами Помогите пожалуйста организовать прокрутку изображения в TImage клавишами "вверх" "вниз" "влево" "вправо".Заранее спасибо! подробнее

Показать сообщение отдельно
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
08.12.2013, 00:41
Цитата Сообщение от newyork7776 Посмотреть сообщение
А как можна через рекурсию?
Вот так:
Кликните здесь для просмотра всего текста
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
#include<iostream>
using namespace std;
 
void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]);
 
void main()
{
    int mas[100],n,sum;
    cout<<"Enter number = ";cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"Enter "<<i+1<<" = ";
        cin>>mas[i];
    }
    cout<<"Suma = ";cin>>sum;
    cout<<"Bankomat = ";
    for(int i=0;i<n;i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    int mas_ef[100],mas_cur[100],num_cur=-1,num_min=100,buf=n-1;
 
    Recur_Search(sum,n-1,mas,num_min,num_cur,mas_ef,mas_cur);
    if(num_min==100)cout<<"No solution";
    else
    {
        cout<<"Number of banknotes = "<<num_min<<endl;
        for(int i=0;i<num_min;i++) cout<<mas_ef[i]<<" ";
    }
    cout<<endl; 
}
 
void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[])
{
    if(num_cur!=-1)//начальная проверка - необходима из-за первого входа в рекурсивную процедуру
    {
        sum-=mas[n];//формирование суммы, необходимой для дозаполнения
        mas_cur[num_cur]=mas[n];//добавляем номинал к текущей последовательности
        num_cur++;
    }else num_cur=0;
 
    if(sum==0)//проверка, что необходимую сумму набрали.
    {
        if(num_min>num_cur)
        {//запись новой минимальной последовательности номиналов
            for(int i=0;i<num_cur;i++) mas_ef[i]=mas_cur[i];
            num_min=num_cur;
        }
    }
    else
        if((float(sum)/mas[n])<(num_min-num_cur)) //проверка на возможность добить сумму !!!текущими!!! максимальными купюрами
                //за меньшее количество купюр, чем текущее значение. Иначе возврат на предыдущую итерацию!!!
        {
            while((n>=0)&&(sum<mas[n])) n--;//поиск номинала меньше или равного необходимой суммы
            if(n>=0)//если нашелся необходимый номинал - обрабатываем дальше. Иначе возврат на предыдущую итерацию!!!
            {//последовательно прорабатываем все варианты для номиналов вниз
                for(int i=n;i>=0;i--) Recur_Search(sum,i,mas,num_min,num_cur,mas_ef,mas_cur);
            }
        }
}

Все тесты, которые в этой теме выложены проходит на отлично. Что совсем не значит, что не найдется и на него соответствующий болт с резьбой . Тестирование только приветствуется.
Ну, и на мое скромное мнение, программа должна работать довольно оперативно: я вложил туда пару условий, что должны воспрепятствовать тупому перебору всех значений и повысить скорость работы. Но только при соблюдении некоторых условий, а именно: номиналы в массиве банкомата должны быть в обязательном порядке отсортированы по возрастанию. Т.е. или надо вводить значения сразу в такой последовательности, или перед рекурсией провести сортировку.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru