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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
#1

Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача - C++

24.06.2011, 23:56. Просмотров 1114. Ответов 19
Метки нет (Все метки)

У покупателя есть n монет достоинством H(1),...,H(n). У продавца есть m монета достоинством B(1),...,B(1). Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача (если она необходима).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача (C++):

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

Сколько единиц товара сможет купить покупатель и какова его сдача? - C++
1. Известна сумма денег, имеющаяся у покупателя и стоимость одной единицы товара. Сколько единиц товара сможет купить покупатель и какова...

Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача? - Pascal ABC
У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет достоинством B(1),...,B(l). Может ли купить покупатель вещь...

Сколько единиц товара покупатель может купить и какова сдача - Turbo Pascal
Помогите пожалуйста решить, очень нужно. Дана сумма денег, имеющаяся у покупателя и стоимость одной единицы товара. Сколько единиц товара...

Известна сумма денег, имеющаяся у покупателя и стоимость одной единицы товара. Сколько единиц товара сможет купить покупатель и какова его сдача? - Pascal ABC
Известна сумма денег, имеющаяся у покупателя и стоимость одной единицы товара. Сколько единиц товара сможет купить покупатель и какова его...

Сколько товаров может купить покупатель - Pascal ABC
Помогите, пожалуйста, решить простые задачки. 2) Известна сумма денег S, имеющуюся у покупателя и стоимость одной единицы товара Х....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
25.06.2011, 15:40 #2


может

или не может

а вдруг он и может и не может?
а как ты думаш?
0
JeyKip
53 / 45 / 2
Регистрация: 23.06.2011
Сообщений: 122
25.06.2011, 18:21 #3
заинтересовала задача...поэтому, интересно было сделать...дает правильный ответ с высокой вероятностью...

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <set>
#include <math.h>
using namespace std;
 
int  Summ(int * mas, int count_el);
set<int> CombinationSumm (int * mas, int count_el);
int Sochetanie (int n, int m);
int CountSet (set<int> s);
int CanZdacha (set<int> prod, set<int> pokup, int price);
 
void main()
{
    
    setlocale(0,"");
    int m_prod, m_pokup;
    int *nom_prod, *nom_pokup;
    int price;
 
    printf("%s","Введите количество монет у продавца и покупателя соответственно\n");
    scanf("%d %d",&m_prod, &m_pokup);
 
    nom_prod = new int [m_prod];
    nom_pokup = new int [m_pokup];
 
    printf("%s","Введите номиналы монет у продавца\n");
    for (int i=0; i<m_prod; i++)
        scanf("%d",&nom_prod[i]);
 
    printf("%s","Введите номиналы монет у покупателя\n");
    for (int i=0; i<m_pokup; i++)
        scanf("%d",&nom_pokup[i]);
 
    printf("%s","Введите стоимость покупки\n");
    scanf("%d", &price);
 
    //хватит ли денег на покупку
    if (price > Summ(nom_pokup, m_pokup))
    {
        printf("%s", "\nПокупатель не может приобрести покупку. У него недостаточно денег");
        getch();
        exit(0);
    }
    else
    {
        int z = CanZdacha(CombinationSumm (nom_prod, m_prod), CombinationSumm (nom_pokup, m_pokup), price);
        switch (z)
        {
        case 0:
            printf("%s","\nКлиент дал под расчет");
            break;
        case 1:
            printf("%s", "\nЗдача есть");
            break;
        case 2:
            printf("%s", "\nЗдачи нет");
            break;
        }
    } 
    getch();
}
 
int Summ(int * mas, int count_el)
{
    int summ = 0;
    for (int i = 0; i<count_el; i++)
        summ+=mas[i];
    return summ;
}
 
set<int> CombinationSumm (int * mas, int count_el)
{
    int sum = 0;
    int money = 0;
    set<int> sets;
    set<int> sets_2;
    set<int>::iterator it1 = sets.begin();
    set<int>::iterator it2 = sets_2.begin();
 
    srand(time(0));
 
    for (int i=1; i<=count_el; i++)
    {
        for (int j=0; j<Sochetanie(count_el, i)*5; j++)
        {
            do
            {
                sets_2.insert(rand()%count_el);
            }
            while (CountSet(sets_2) != i);
 
            it2 = sets_2.begin();
            while (it2 != sets_2.end())
            {
                sum+=mas[*it2];
                it2++;
            }
            sets_2.clear();
            sets.insert(sum);
            sum = 0;
        }
    }
    return sets;
}
 
int Sochetanie (int n, int m)
{
    int p = 1;
    for (int i = m; i>0; i--)
        p*=(n--);
    return p;
}
 
int CountSet (set<int> s)
{
    set<int>::iterator it = s.begin();
    int count = 0;
    while (it != s.end())
    {
        count++;
        it++;
    }
    return count;
}
 
int CanZdacha (set<int> prod, set<int> pokup, int price)
{
    int zdacha = 2;
    set<int>::iterator it1 = prod.begin();
    set<int>::iterator it2 = pokup.begin();
 
    while (it1 != prod.end())
    {
        it2 = pokup.begin();
        while (it2 != pokup.end())
        {
            if ((*it2 - price) == *it1)
            {
                zdacha = 1;
                break;
            }
            else if ((*it2 - price) == 0)
            {
                zdacha = 0;
                break;
            }
            it2++;
        }
        it1++;
    }
    return zdacha;
}
2
sandye51
25.06.2011, 18:32
  #4

Не по теме:

жесть, ассоциативные контейнеры STL и стандартный вывод С

1
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
08.07.2011, 07:51  [ТС] #5
Цитата Сообщение от JeyKip Посмотреть сообщение
заинтересовала задача...поэтому, интересно было сделать...дает правильный ответ с высокой вероятностью...

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <set>
#include <math.h>
using namespace std;
 
int  Summ(int * mas, int count_el);
set<int> CombinationSumm (int * mas, int count_el);
int Sochetanie (int n, int m);
int CountSet (set<int> s);
int CanZdacha (set<int> prod, set<int> pokup, int price);
 
void main()
{
    
    setlocale(0,"");
    int m_prod, m_pokup;
    int *nom_prod, *nom_pokup;
    int price;
 
    printf("%s","Введите количество монет у продавца и покупателя соответственно\n");
    scanf("%d %d",&m_prod, &m_pokup);
 
    nom_prod = new int [m_prod];
    nom_pokup = new int [m_pokup];
 
    printf("%s","Введите номиналы монет у продавца\n");
    for (int i=0; i<m_prod; i++)
        scanf("%d",&nom_prod[i]);
 
    printf("%s","Введите номиналы монет у покупателя\n");
    for (int i=0; i<m_pokup; i++)
        scanf("%d",&nom_pokup[i]);
 
    printf("%s","Введите стоимость покупки\n");
    scanf("%d", &price);
 
    //хватит ли денег на покупку
    if (price > Summ(nom_pokup, m_pokup))
    {
        printf("%s", "\nПокупатель не может приобрести покупку. У него недостаточно денег");
        getch();
        exit(0);
    }
    else
    {
        int z = CanZdacha(CombinationSumm (nom_prod, m_prod), CombinationSumm (nom_pokup, m_pokup), price);
        switch (z)
        {
        case 0:
            printf("%s","\nКлиент дал под расчет");
            break;
        case 1:
            printf("%s", "\nЗдача есть");
            break;
        case 2:
            printf("%s", "\nЗдачи нет");
            break;
        }
    } 
    getch();
}
 
int Summ(int * mas, int count_el)
{
    int summ = 0;
    for (int i = 0; i<count_el; i++)
        summ+=mas[i];
    return summ;
}
 
set<int> CombinationSumm (int * mas, int count_el)
{
    int sum = 0;
    int money = 0;
    set<int> sets;
    set<int> sets_2;
    set<int>::iterator it1 = sets.begin();
    set<int>::iterator it2 = sets_2.begin();
 
    srand(time(0));
 
    for (int i=1; i<=count_el; i++)
    {
        for (int j=0; j<Sochetanie(count_el, i)*5; j++)
        {
            do
            {
                sets_2.insert(rand()%count_el);
            }
            while (CountSet(sets_2) != i);
 
            it2 = sets_2.begin();
            while (it2 != sets_2.end())
            {
                sum+=mas[*it2];
                it2++;
            }
            sets_2.clear();
            sets.insert(sum);
            sum = 0;
        }
    }
    return sets;
}
 
int Sochetanie (int n, int m)
{
    int p = 1;
    for (int i = m; i>0; i--)
        p*=(n--);
    return p;
}
 
int CountSet (set<int> s)
{
    set<int>::iterator it = s.begin();
    int count = 0;
    while (it != s.end())
    {
        count++;
        it++;
    }
    return count;
}
 
int CanZdacha (set<int> prod, set<int> pokup, int price)
{
    int zdacha = 2;
    set<int>::iterator it1 = prod.begin();
    set<int>::iterator it2 = pokup.begin();
 
    while (it1 != prod.end())
    {
        it2 = pokup.begin();
        while (it2 != pokup.end())
        {
            if ((*it2 - price) == *it1)
            {
                zdacha = 1;
                break;
            }
            else if ((*it2 - price) == 0)
            {
                zdacha = 0;
                break;
            }
            it2++;
        }
        it1++;
    }
    return zdacha;
}
эта программа не запускается помогите исправит ошибки в программе
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.07.2011, 07:54 #6
Цитата Сообщение от povtiasd051 Посмотреть сообщение
эта программа не запускается помогите исправит ошибки в программе
Какой у вас компилятор? Если борланд - забудьте.
0
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
08.07.2011, 07:57  [ТС] #7
Цитата Сообщение от diagon Посмотреть сообщение
Какой у вас компилятор? Если борланд - забудьте.
На борланде не пашет что, а сможешь выложит вариант который работает с на нем
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.07.2011, 08:01 #8
С таким условием - нет.
Цитата Сообщение от povtiasd051 Посмотреть сообщение
У продавца есть m монета достоинством B(1),...,B(1).
Как это понимать? У продавца m монет достоинством в 1 единицу?
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
08.07.2011, 08:04 #9
врядли тут у кого то борланд есть, так что "точить" самому придётся
0
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
08.07.2011, 08:06  [ТС] #10
Цитата Сообщение от diagon Посмотреть сообщение
С таким условием - нет.

Как это понимать? У продавца m монет достоинством в 1 единицу?
В этом месте ошибка не B(1),...B(1) должен быт там вот так B(1),...B(m)
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.07.2011, 08:16 #11
Со убожеством борланда я не знаком, однако алгоритм примерно такой:
Перебираете все возможные комбинации из монет покупателя, сумма которых больше S, и к ним подбираете все возможные комбинации из монет продавца. Если монеты покупателя - монеты продавца == S то сделка возможна...
1
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
08.07.2011, 08:45  [ТС] #12
Цитата Сообщение от diagon Посмотреть сообщение
Со убожеством борланда я не знаком, однако алгоритм примерно такой:
Перебираете все возможные комбинации из монет покупателя, сумма которых больше n, и к ним подбираете все возможные комбинации из монет продавца. Если монеты покупателя - монеты продавца == S то сделка возможна...
На этом спасибо а ты не знаешь кто его сможет сделать

Добавлено через 4 минуты
Цитата Сообщение от diagon Посмотреть сообщение
Со убожеством борланда я не знаком, однако алгоритм примерно такой:
Перебираете все возможные комбинации из монет покупателя, сумма которых больше S, и к ним подбираете все возможные комбинации из монет продавца. Если монеты покупателя - монеты продавца == S то сделка возможна...
Дружище на Паскале Сможешь выложит

Добавлено через 19 минут
Кто хорош шарит в borland С++ помогите да
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
08.07.2011, 09:26 #13
да ни у кого нету тут borland c++, в каком году его последняя версия вышла? Есть шанс что во фрилансе кто-нибудь за умеренную плату специально для тебя скачает его и будет колбаситься с ним, а так врядли
0
povtiasd051
2 / 2 / 0
Регистрация: 06.12.2010
Сообщений: 135
08.07.2011, 09:32  [ТС] #14
Цитата Сообщение от pito211 Посмотреть сообщение
да ни у кого нету тут borland c++, в каком году его последняя версия вышла? Есть шанс что во фрилансе кто-нибудь за умеренную плату специально для тебя скачает его и будет колбаситься с ним, а так врядли
че так слабо с этим языком вроде он как бы самый популярный чем Паскал
0
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
08.07.2011, 09:35 #15
а тем что он уже 10 лет не обновляется, а прогресс не стоит на месте, как известно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2011, 09:35
Привет! Вот еще темы с ответами:

Найти максимальную стоимость товара Р, которую покупатель не может купить - Delphi
Покупатель имеет купюры достоинством A(1), ...,A(n), а продавец - B(1), .. ,B(m). Необходимо найти максимальную стоимость товара Р, которую...

Купить K наименований книг так, чтобы заявка была удовлетворена по количеству приобретаемых разных книг - Turbo Pascal
Помогите решить? Вечером выложу наработки. 2.3.10. В библиотечном коллекторе имеется N наименований книг. Для каждой книги указаны...

От какой стоимости можно купить достойную кофеварку? - Кофемашины
Мне подруга сказала, что все кофеварки, которые стоят дешевле 10 тысяч, это не кофеварки, а жалкое их подобие. Как вы думаете, она права?

Возможно ли Отдельно купить Роутер без Wi-FI и отдельно купить Wi-Fi и соединить их чтобы они обои работали - Wi-Fi
Возможно ли такое: Отдельно купить Роутер без Wi-FI и отдельно купить Wi-Fi и соединить их чтобы они обои работали ?! То есть: Сейчас...


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

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

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