Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
#1

Задачка для мозга - C++

26.10.2011, 09:17. Просмотров 2302. Ответов 28
Метки нет (Все метки)

Помогите решить задачку:

Рассеянный кассир, оплачивая чек мистеру X, перепутал доллары и центы и отсчитал клиенту доллары вместо центов и центы вместо долларов. Купив газету за пять центов, X обнаружил, что денег у него вдвое больше, чем он должен был получить по чеку. На какую сумму был выписан чек?

Нашел ее решение в устном виде, известно что используется диофантово ур-ие. Но как сделать решение задачи на Си в общем виде, чтоб программа сама нашла ответ, ни как догнать не могу... Полное решение не прошу) Хотя бы советы, или мысли по поводу задачи. Хочется все таки самому сделать в итоге.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 09:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задачка для мозга (C++):

Работа с реестром, взрыв мозга
Хех, доброго времени суток тебе, форумчанин. В муках уже второй день, никак не...

Вынос мозга с чтением файла
Здравствуйте. К моему сожалению облазив Яндекс и Гугл, я не смог найти решения...

Задачка для С++
даны два числа. Вывести большее из них

задачка для зачета
Движение закрашенного круга по синусоиде из левого нижнего угла экрана в правый...

Задачка для реализации в С++
Производится стрельба двумя снарядами по k бакам с го- рючим (k>2),...

Задачка от Страуструпа для новичков
Вот задачка от Страуструпа для новичков char* cat(const char* str_1,...

28
-=ЮрА=-
Заблокирован
Автор FAQ
26.10.2011, 10:06 #2
[quote=DenProx;2105431]Хотя бы советы, или мысли по поводу задачи. [quote]
Пусть А - цена товара
Это вещественное число, т.к. в задаче речь ведётся и про доллары и про центы
Итак А = В + С/100 (где В - число долларов С - число центов)

Бедный мистер Х сделал следующую проплату
D + E (где D = С - число долларов Е = В - число центов)
Переведём D + E в доллары, получим A1 = D + E/100

Имеем разницу
А - А1 = В + С/100 - С + В/100
Пусть в кошельке изначально было Z долларов
Цитата Сообщение от DenProx Посмотреть сообщение
что денег у него вдвое больше, чем он должен был получить по чеку.
Имеем (Z - A)*2 = (Z - A1)

Вот система
А - А1 = В + С/100 - С + В/100
(Z - A)*2 = (Z - A1)

Решите её относительно В и С, как по мне всё довольно просто...
1
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
26.10.2011, 10:09  [ТС] #3
-=ЮрА=-, спасибо) буду думать)
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.10.2011, 10:15 #4
Продолжу (Z - A)*2 = (Z - A1) => Z = A - A1
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
А - А1 = В + С/100 - С + В/100
- как видим стоимость покупки зависит от изначального количества денег в кошельке мистера Х
Получаем
100*Z = 101*В - 99*С

Добавлено через 3 минуты
DenProx, сама программа не проблемма, меня смущает множественнность решений
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
стоимость покупки зависит от изначального количества денег в кошельке мистера Х
, вы говорили что обладаете

Цитата Сообщение от DenProx Посмотреть сообщение
Нашел ее решение в устном виде, известно что используется диофантово ур-ие.
- приведите это решение, написать программу для меня не проблемма, сам алгоритм нужен, вот
0
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
26.10.2011, 10:25  [ТС] #5
-=ЮрА=-,

Рассеянный кассир, оплачивая чек мистеру Брауну, перепутал доллары и центы и отсчитал клиенту доллары вместо центов и центы вместо долларов. Купив газету за пять центов, Браун обнаружил, что денег у него ровно в двое больше, чем он должен получить по чеку. На какую сумму был выписан чек?
Решение: Пусть х – число долларов, а у – число центов в той сумме, на которую мистер Браун выписал чек. Запишем условие задач в виде уравнения: 100у+х–5=2(100х+у), или, 99у-199х=5. Это диофантово уравнение, имеющее бесконечно много решений в целых числах. Обычный метод решения с помощью непрерывных дробей дает наименьшее значение в положительных числах х=31, у=63. Следовательно, мистер Браун выписал чек на сумму 31 доллар 63 цента. Это единственный ответ к задачи, поскольку ближайшее к найденному решение х=129, у=262 не удовлетворяет требованию: у должен быть меньше 100 (В одном долларе сто центов). Ответ: 31 доллар 63 цента.

http://www.tgl.net.ru/wiki/index.php...%D0%B8%D0%B5_7
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.10.2011, 10:34 #6
Цитата Сообщение от DenProx Посмотреть сообщение
Это диофантово уравнение, имеющее бесконечно много решений в целых числах.
- а ну получается я был прав, ну что тогда я попробую организовать этот перебор
Цитата Сообщение от DenProx Посмотреть сообщение
с помощью непрерывных дробей
и вконце будет пропечатано

Цитата Сообщение от DenProx Посмотреть сообщение
наименьшее значение в положительных числах х=31, у=63
+ учту эти ограничения
Цитата Сообщение от DenProx Посмотреть сообщение
у должен быть меньше 100
. т.е программа нужна чтобы сделать перебор за насМне понадобиться какое-то время, хотя Вы тожете можете попробовать указанный мною пробор поорганизовывать, когда буду готов отпишусь и сравним что у нас получилось, как Вам идея?
1
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
26.10.2011, 10:38  [ТС] #7
-=ЮрА=-, идея хорошая) но я только вечером возможно буду готов... щас на работе, времени нет
0
-=ЮрА=-
26.10.2011, 10:40
  #8

Не по теме:

Цитата Сообщение от DenProx Посмотреть сообщение
щас на работе, времени нет
-аналогично сижу на форуме параллельно с планами на ноябрьТогда до вечера

0
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
27.10.2011, 09:01  [ТС] #9
-=ЮрА=-,

Не по теме:

ок



Добавлено через 22 часа 19 минут
Что то у меня пока не особо получается. Еще и работы привалило... в нете нашел решение подобной задачи, но ответ выдает не совсем такой как указан в приведенном мной примере выше.

вот код, который я нашел:
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
/* Author:  Pate Williams (c) 1997 */
 
#include <stdio.h>
 
#define DEBUG
 
 
void extended_euclid(long a, long b, long *x, long *y, long *d)
 
/* calculates a * *x + b * *y = gcd(a, b) = *d */
 
{
 
  long q, r, x1, x2, y1, y2;
 
 
  if (b == 0) {
 
    *d = a, *x = 1, *y = 0;
 
    return;
 
  }
 
  x2 = 1, x1 = 0, y2 = 0, y1 = 1;
 
  #ifdef DEBUG
  printf("------------------------------");
  printf("-------------------\n");
  printf("q    r    x    y    a    b    ");
  printf("x2   x1   y2   y1\n");
  printf("------------------------------");
  printf("-------------------\n");
  #endif
 
  while (b > 0) {
 
    q = a / b, r = a - q * b;
 
    *x = x2 - q * x1, *y = y2 - q * y1;
 
    a = b, b = r;
 
    x2 = x1, x1 = *x, y2 = y1, y1 = *y;
 
    #ifdef DEBUG
    printf("%4ld %4ld %4ld %4ld ", q, r, *x, *y);
    printf("%4ld %4ld %4ld %4ld ", a, b, x2, x1);
    printf("%4ld %4ld\n", y2, y1);
    #endif
 
  }
 
  *d = a, *x = x2, *y = y2;
 
  #ifdef DEBUG
  printf("------------------------------");
  printf("-------------------\n");
  #endif
 
}
 
 
 
int main(void)
{
 
  long a = 199, b = 98, d, x, y;
 
  extended_euclid(a, b, &x, &y, &d);
 
  printf("x = %ld y = %ld d = %ld\n", x, y, d);
 
  //return 0;
  getch();
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 09:30 #10
DenProx, честно вчера завеялся и просто руки не дошли
0
DenProx
27.10.2011, 11:04  [ТС]
  #11

Не по теме:

-=ЮрА=-, да не страшно) у самого еще дел образовалось кучу... тож пока не до задачки )

0
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
22.11.2011, 11:03  [ТС] #12
Хотел бы поднять тему, т.к. решить так и не получилось пока что задачу, так чтобы ответы совпали с теми что приводятся в примере.
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 13:11 #13
Цитата Сообщение от DenProx Посмотреть сообщение
Хотел бы поднять тему, т.к. решить так и не получилось пока что задачу, так чтобы ответы совпали с теми что приводятся в примере.
- приношу извинения я тогда сделал, а разместить забыл, ниже мой взгляд на проблемму
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    long B, C, Z;
    cout<<"Z - vsego deneg v koshelke\n";
    cout<<"Z - B + C/100.0 deistvit stoimost pokypki\n";
    cout<<"Z - C + B/100.0 den'gi kotorie yplatil mister\n";
    cout<<"  Z   B   C\tZ - B + C/100.0\tZ - C + B/100.0\n";
    for(Z = 1; Z < 100 ; Z++)
    for(B = 1; B < 100 ; B++)
    for(C = 1; C < 100 ; C++)
    {
        if((Z - B + C/100.0) == (Z - C + B/100.0)*2)
        if(100*Z == 199*C - 98*B)
        {
            cout<<setw(3)<<Z<<" "
                <<setw(3)<<B<<" "
                <<setw(3)<<C<<"\t"
                <<setw(8)<<Z - B + C/100.0<<"\t"
                <<setw(8)<<Z - C + B/100.0<<endl;
        }
    }
    system("pause");
    return 0;
}
Вывод в консоль на миниатюре
1
Миниатюры
Задачка для мозга  
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
22.11.2011, 13:16  [ТС] #14
-=ЮрА=-, Спасибо) Можете немного объяснить, что выводится?) ответ к которому я стремился :
Х = 31, У = 63. По какому условию можно выбрать эти значения из данных чисел?
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 13:27 #15
Цитата Сообщение от DenProx Посмотреть сообщение
-=ЮрА=-, Спасибо) Можете немного объяснить, что выводится?) ответ к которому я стремился : Х = 31, У = 63. По какому условию можно выбрать эти значения из данных чисел?
возвращаюсь ко 2-му посту
Итоговая система:
А - А1 = В + С/100 - С - В/100

Не по теме:

(я в формуле накосил когда скобки раскрыл было В + С/100 - С + В/100)


(Z - A)*2 = (Z - A1)
Раскрыв скобки получим
Z = 2*A - A1 {A = B + C/100; A1 = C + B/100}
Z = 2*B + (2/100)*C - C - B/100
100*Z = 199*B - 98*C

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(Z - A)*2 = (Z - A1)
if((Z - B + C/100.0) == (Z - C + B/100.0)*2)
1
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
22.11.2011, 13:32  [ТС] #16
-=ЮрА=-, Спасибо)) Уже понял))

кст, вот еще один вариант решения:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
main()
{
     int x,y,i;
     for(x=1;x<100;x++)
     {
          for(y=1;y<100;y++)
          {
               if(x==((199*y-5)/98))
               {
                    cout << "x: " << x << " " << "y: " << y << endl;
                    i++;
               }
          }
     }
     cout << i;
     system("pause");
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 13:38 #17
DenProx, предостерегаю Вас, здесь кроется недочёт
Цитата Сообщение от DenProx Посмотреть сообщение
if(x==((199*y-5)/98))
Типы переменных int делите на int Вы можете 2/3 и получить нолик, я недаром писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
B/100.0
- эти неявно к даблу преобразовывал, вот. Будьте внимательны при делении, я сам много раз обжигался
1
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
22.11.2011, 13:44  [ТС] #18
-=ЮрА=-, спасибо!)) Учту на будущее
0
-=ЮрА=-
22.11.2011, 13:45
  #19

Не по теме:

PS:Мне не очень понятно откуда появилось 5

Цитата Сообщение от DenProx Посмотреть сообщение
if(x==((199*y-5)/98))

0
DenProx
Техник
311 / 169 / 25
Регистрация: 09.10.2009
Сообщений: 3,061
22.11.2011, 13:46  [ТС] #20
-=ЮрА=-, исходное уравнение задачи: 98х-199у=5 (5 центов)
1
22.11.2011, 13:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 13:46
Привет! Вот еще темы с решениями:

Очень простая задачка (но не для меня)
Привет, помогите плиз. У меня одностраничник, при заходе на него с ПК...

Сложноватая задачка для нахождения интеграла
Нам задали задание, но я плохо понял что и как надо делать нужно использовать...

Задачка для новичков #3: определить, является ли строка палиндромом
Простенькая задачка, нужно запилить нормальный плюсовый код. Юзер...

стоит связываться или это не задачка для начинающих?
Объясню предысторию. Многие хранят свои картинки на яндексе, затем делают пост...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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