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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
#1

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

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

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

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

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

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

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

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

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

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

Задачка от Страуструпа для новичков - C++
Вот задачка от Страуструпа для новичков char* cat(const char* str_1, const char* str_2) { int len_1 = strlen(str_1), ...

28
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
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
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
22.11.2011, 13:44  [ТС] #18
-=ЮрА=-, спасибо!)) Учту на будущее
0
-=ЮрА=-
22.11.2011, 13:45
  #19

Не по теме:

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

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

0
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
22.11.2011, 13:46  [ТС] #20
-=ЮрА=-, исходное уравнение задачи: 98х-199у=5 (5 центов)
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 13:50 #21
DenProx, я это понял, но по условию никак не могу выйти на 5-ть центов, можите пояснить, м.б. я настроившись на свой вариант отметаю другой правильный. Мне интересно понять ход Вашей мысли

Добавлено через 1 минуту
Аааааааа
Цитата Сообщение от DenProx Посмотреть сообщение
Купив газету за пять центов
- вот я рассеянный
0
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
22.11.2011, 13:51  [ТС] #22
-=ЮрА=-, да Бывает)
0
-=ЮрА=-
22.11.2011, 13:52
  #23

Не по теме:

DenProx, сейчас переделаю выкладки, с учётом 5 центов решение немного изменится

0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 14:08 #24
А = B + C/100
A1 = C + B/100
(Z - A)*2 = (Z - A1) - 5/100
2*Z - 2*B - (2/100)*C = Z - C - B/100 - 5/100
Z = (199/100)*B - (98/100)*C - 5/100

100*Z = 199*B - 98*C - 5 - условие 1
(Z - A)*2 = (Z - A1) - 5/100 : (Z - B - C/100.0)*2 = (Z - C - B/100.0) - 5/100.0 - условие 2
Следовательно нужно заменить условия здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if((Z - B + C/100.0) == (Z - C + B/100.0)*2)
* * * * * * * * if(100*Z == 199*C - 98*B)
на такие
C++
1
2
    if((Z - B - C/100.0) - 5/100.0 == (Z - C - B/100.0)*2)
        if(100*Z == 199*C - 98*B - 5)
Кроме того после этой замены появляется минус, поэтому делаем доп условия
C++
1
2
if(0 <= (Z - B - C/100.0) - 5/100.0)
        if(0 <= Z - C - B/100.0)
Ниже вид цикла по С (остальное без изменений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(C = 1; C < 100 ; C++)
    {
        if(0 <= (Z - B - C/100.0) - 5/100.0)
        if(0 <= Z - C - B/100.0)
        if((Z - B - C/100.0) - 5/100.0 == (Z - C - B/100.0)*2)
        if(100*Z == 199*C - 98*B - 5)
        {
            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;
        }
    }
1
Миниатюры
Задачка для мозга  
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
22.11.2011, 14:13  [ТС] #25
-=ЮрА=-, Спасибо!! Вы меня очень выручили
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 14:19 #26
DenProx, мне самому было интересно!!!)))

Не по теме:

PS: надеюсь нигде в формулах не стратил, м.б. ещё раз проверить всё?
Я рассеян и часто что-то не так сокращаю или вычитаю - из за этих мелких казусов отличные решения по логике выходят ацтойненькими в реализации. Чуть позже посмотрю всё на свежую голову, меня озадачивает, то что 31 так нигде и не получили

Цитата Сообщение от DenProx Посмотреть сообщение
Ответ: 31 доллар 63 цента.

0
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 14:32 #27
DenProx, я так и знал что где-то что то не так. Ниже алгоритм и скрин работы - как видите это уже верняк 100% (при 53 долларах в кошельке стоимость покупке 31,63 как и в решении о котором вы говорили), а это условие излишне
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if((Z - B - C/100.0) - 5/100.0 == (Z - C - B/100.0)*2)
мы и так скобки раскрыли.
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
#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(0 <= (Z - B - C/100.0))
        if(0 <= (Z - C - B/100.0) - 5/100.0)
        //if(((Z - B - C/100.0))*2.0 == (Z - C - B/100.0) - 5/100.0)
        if(100*Z == 199*C - 98*B - 5)
        {
            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
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,049
22.11.2011, 14:37  [ТС] #28
-=ЮрА=-, Отлично
0
-=ЮрА=-
22.11.2011, 14:47     Задачка для мозга
  #29

Не по теме:

Цитата Сообщение от DenProx Посмотреть сообщение
-=ЮрА=-, Отлично
- пасибГлавное что теперь всё ок работает и Вам всё-таки сумел помочь

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 14:47
Привет! Вот еще темы с ответами:

Очень простая задачка (но не для меня) - C++
Привет, помогите плиз. У меня одностраничник, при заходе на него с ПК устройства, сайт почему автоматически перебрасывает вконец...

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

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

Задачка на строки (преобразовать множество старых программ для новой версии компилятора) - C++
Доброго времени суток, помогите решить такую вот задачку на строки Заранее благодарен! Условие:


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

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

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