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

Веселые ребусы... - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
23.12.2009, 23:21     Веселые ребусы... #1
Условие:
Составить алгоритм решения ребуса "ДРУГ-ГУРД=2727" (различные буквы означают различные цифры, старшая - не 0 ).

Все мои попытки приводили к неправильному результату...

Значит, как я решал:
1. 4 переменные - d, r, u, g и еще 2: s0 - drug (немного подробнее про это всё ниже) и s1 - gurd;
2. Так, как первая буква не 0 и различные буквы - различные цифры - я получил след. циклы:
for(d=1;d<10;d++)
for(r=0;r<10;r++) (тут ниже сразу же условие: r!=d)
for(u=0;u<10;u++) (очередной IF из 2х условий: u!=r И u>d)
for(g=0;g<10;g++) (и последний IFg!=u)&&(g!=r)&&(g!=d))
3. После всех циклов и IF'ов я дошел до: s0 = (d*1000) + (r*100) + (u*10) + g;
s1 = (g*1000) + (u*100) + (r*10) + d;
4. Судя по ребусу K (разность s0-s1) должна быть равна 2727, но вот....

Вобщем, помогите, пожалуйста...

Добавлено через 52 минуты
up!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2009, 23:21     Веселые ребусы...
Посмотрите здесь:

Pascal Ребусы на Паскале
Ребусы. вовка+ирка и подобное Turbo Pascal
Веселые HDD
числовые ребусы в Pascal Pascal
Pascal Паскаль Ребусы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.12.2009, 00:00     Веселые ребусы... #2
че надо то?
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 00:08  [ТС]     Веселые ребусы... #3
Составить алгоритм решения ребуса "ДРУГ-ГУРД=2727" =)
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.12.2009, 00:10     Веселые ребусы... #4
newby, объясните по человечески...что это такое,почему друг-гурд равен 2727?...прочтите ваш первый пост от другого лица,все понятно?
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 00:18  [ТС]     Веселые ребусы... #5
Задание, которое в книге:
Составить алгоритм решения ребуса "ДРУГ-ГУРД=2727" (различные буквы означают различные цифры, старшая - не 0 ).
©. Я ни слова не поменял.

Предполагается, что Д, Р, У, Г - цифры, которые складывают два числа ДРУГ и ГУРД. Разность этих чисел по условию должна равняться 2727. Теперь яснее?
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
24.12.2009, 01:16     Веселые ребусы... #6
newby,

обратись к odip'у, помню, он какую-то похожую бодягу решал
Yurii_74
paladin
 Аватар для Yurii_74
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
24.12.2009, 06:39     Веселые ребусы... #7
Цитата Сообщение от newby Посмотреть сообщение
for(u=0;u<10;u++) (очередной IF из 2х условий: u!=r И u>d)
Почему u>d, а не u!=d? Условие для моего невыспавшегося мозга не совсем очевидное.
d>g я еще понимаю.
DrMcSheen
 Аватар для DrMcSheen
59 / 59 / 1
Регистрация: 25.05.2009
Сообщений: 521
24.12.2009, 08:40     Веселые ребусы... #8
Щя

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for(d=1;d<10;d++)
        {
        for(r=0;r<10;r++)
                {
                if (r==d) continue;
                for(u=0;u<10;u++)
                        {
                        if ((u==d) || (u==r)) continue;
                        for(g=1;g<10;g++)
                                {
                                if ((g==d) || (g==r) || (g==u)) continue;
                                s0 = (d*1000) + (r*100) + (u*10) + g;
                                s1 = (g*1000) + (u*100) + (r*10) + d;
                                if ((s0-s1)==2727)
                                        {
                                        Memo1->Lines->Add(s0);
                                        }
                                }
                        }
                }
        }
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 14:37  [ТС]     Веселые ребусы... #9
C++
1
Memo1->Lines->Add(s0);
На эту строку ругается...что это? (я крайне начинающий)))
DrMcSheen
 Аватар для DrMcSheen
59 / 59 / 1
Регистрация: 25.05.2009
Сообщений: 521
24.12.2009, 18:47     Веселые ребусы... #10
Это вывод результата в поле Memo. Наверху на панели инструментов ищи, рядом с кнопкой. И перетащи на форму
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
20.05.2012, 09:12     Веселые ребусы... #11
Мой вариант:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int d, r, u, g, str1, str2, str3;  
 
  for (d=1; d<10; d++) // 1-ый цикл
   {         
    for (r=0; r<10; r++) // 2-ой цикл
     {
      if (r==d) continue;
      for (u=0; u<10; u++) // 3-ий цикл
       {
        if ((u==d) || (u==r)) continue;
        for (g=1; g<10; g++) // 4-ый цикл
         {
          if ((g==d) || (g==r) || (g==u)) continue;
           str1= (d*1000)+(r*100)+(u*10)+g; // Составляем DRUG из цифр
           str2= (g*1000)+(u*100)+(r*10)+d; // Составляем GUGD из цифр
           str3= str1-str2; // DRUG - GURD
          if ((str3) == 2727) // Если результат = 2727, то...
           {
            printf ("\n DRUG:   %d", str1); // вывести 
            printf ("\n GURD: - %d", str2); // результат
            printf ("\n         ----");
            printf ("\n         %d", str3); // на экран
            printf ("\n ");
           }          
         }
       }
     }
   }             
 getch();
 return 0;
}


Правильно ли я понимаю, что строка “if (r==d) continue;” означает следующее. Если r равен d, то пропустить 2-ой цикл и продолжить с 3-го?

Строка “if ((u==d) || (u==r)) continue;” – если u равен d или u равен r, то пропустить 3-ий цикл и продолжить с 4-го?

Строка “if ((g==d) || (g==r) || (g==u)) continue;” - если g равен d или g равен r или g равен u, то пропустить 4-ий цикл и выполнять код дальше?
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
20.05.2012, 10:13     Веселые ребусы... #12
Чисто математика.
1000Д + 100Р + 10У + Г - 1000Г - 100У - 10Р - Д = 2727
999( Д - Г ) + 90( Р - У ) = 2727 | :9
111( Д - Г ) + 10( Р - У ) = 303
111( Д - Г ) + 10( Р - У ) + 30 = 303 + 30
10( Р - У + 3 ) = 111( Г - Д + 3 )
Тогда ( Г - Д + 3 ) делится на 10. Но если оно больше либо равно 10, тогда правая часть больше либо равна 1110, а значит слева скобка ( Р - У + 3 ) больше либо равна 111, что невозможно. Тогда Г - Д + 3 = 0 и вся правая часть аналогично равна нулю. Тогда и слева Р - У + 3 = 0 .
Получили:
1) Г = Д - 3
2) Р = У - 3
Вот и перебираем двумя циклами от нуля до шести.
C++
1
2
3
4
5
6
for( G = 1 ; G <= 6 ; G++ )
  for( R = 0 ; R <= 6 ; R++ )
    if( R == G || R == G+3 || R == G-3 )
      continue;
    else
      cout << "D: " << G + 3 << " R: " << R << " U: " << R + 3 << " G: " << G << endl ;
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
20.05.2012, 20:57     Веселые ребусы... #13
На мой вопрос кто ответит?
ВАСИЛЕВС
555 / 478 / 60
Регистрация: 14.02.2012
Сообщений: 1,561
20.05.2012, 21:41     Веселые ребусы... #14
Shman, тут есть объяснение.
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
20.05.2012, 22:55     Веселые ребусы... #15
Хаха, мой код проще в 100500 раз, а ему пофиг и он смотрит другой тупой алгоритм.
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
21.05.2012, 06:14     Веселые ребусы... #16
AncinetHero,
Твой код никуда не проще, сначала надо объяснить принцип решения, тогда будет понятен твой код. А когда смотришь на код DrMcSheen все понятно без разжевывания. В твоем хоть и меньше циклов, но он руден для понимания и глупо называть алгоритм DrMcSheen тупым, когда он прекрасно работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 11:09     Веселые ребусы...
Еще ссылки по теме:

Turbo Pascal Ребусы паскаль
множество точек А и арифметические ребусы Turbo Pascal
C# Веселые задачки

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

Или воспользуйтесь поиском по форуму:
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
21.05.2012, 11:09     Веселые ребусы... #17
Я все четко расписал, а "тупым" другой алгоритм я имею полное право называть, так как в нем нет никакой логики, у него реализован "тупой перебор", а у меня математически решено и доказано.

Добавлено через 56 секунд
Вообще если непонятно, спрашивают. То, что я использовал в решении учат в 6 классе.
Yandex
Объявления
21.05.2012, 11:09     Веселые ребусы...
Ответ Создать тему
Опции темы

Текущее время: 04:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru