С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
#1

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

23.12.2009, 23:21. Просмотров 2403. Ответов 16
Метки нет (Все метки)

Условие:
Составить алгоритм решения ребуса "ДРУГ-ГУРД=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!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2009, 23:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Веселые ребусы... (C++):

Веселые задачки - C#
За любую помощь буду очень благодарен!!!

Веселые HDD - Жесткие диски
Ребят вопрос вообще не в тему! Ну я не знал куда писать! Так как обычно тут тусуюсь знаю что тут толковые люди! Дело такое: ...

MS-7778 VER:1.0, веселые USB порты - Материнские платы
Доброго времени суток. Материнка стартует,но никак не выводит изображение,но самое интересное с USB портами. При подключении клавиатуры...

Ребусы на Паскале - Pascal
Для тех, кто любит ребусы:) Если даже решите какой-нибудь один - пишите;) 1) ОДИН+ОДИН+ОДИН+ОДИН+ОДИН=ПЯТЬ 2)КУБ=(К+У+Б) -(скобка в...

Паскаль Ребусы - Pascal
ВАНЯ+ВАНЯ+ВАНЯ+ВАНЯ+ВАНЯ=ИВАНЫ

Ребусы паскаль - Turbo Pascal
ФАСАД АСАД + САД АД СУДОК

16
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
24.12.2009, 00:00 #2
че надо то?
0
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 00:08  [ТС] #3
Составить алгоритм решения ребуса "ДРУГ-ГУРД=2727" =)
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
24.12.2009, 00:10 #4
newby, объясните по человечески...что это такое,почему друг-гурд равен 2727?...прочтите ваш первый пост от другого лица,все понятно?
0
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 00:18  [ТС] #5
Задание, которое в книге:
Составить алгоритм решения ребуса "ДРУГ-ГУРД=2727" (различные буквы означают различные цифры, старшая - не 0 ).
©. Я ни слова не поменял.

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

обратись к odip'у, помню, он какую-то похожую бодягу решал
0
Yurii_74
paladin
280 / 180 / 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 я еще понимаю.
0
DrMcSheen
60 / 60 / 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);
                                        }
                                }
                        }
                }
        }
1
newby
2 / 2 / 0
Регистрация: 23.12.2009
Сообщений: 11
24.12.2009, 14:37  [ТС] #9
C++
1
Memo1->Lines->Add(s0);
На эту строку ругается...что это? (я крайне начинающий)))
1
DrMcSheen
60 / 60 / 1
Регистрация: 25.05.2009
Сообщений: 521
24.12.2009, 18:47 #10
Это вывод результата в поле Memo. Наверху на панели инструментов ищи, рядом с кнопкой. И перетащи на форму
1
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-ий цикл и выполнять код дальше?
0
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 ;
0
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
20.05.2012, 20:57 #13
На мой вопрос кто ответит?
0
ВАСИЛЕВС
556 / 479 / 60
Регистрация: 14.02.2012
Сообщений: 1,561
20.05.2012, 21:41 #14
Shman, тут есть объяснение.
0
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
20.05.2012, 22:55 #15
Хаха, мой код проще в 100500 раз, а ему пофиг и он смотрит другой тупой алгоритм.
0
20.05.2012, 22:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 22:55
Привет! Вот еще темы с ответами:

Ребусы.задача - Turbo Pascal
С помощью множеств решить ребус лоб+три=сам.ответ запишите в файл Помогите пожалуйста с задачей.

числовые ребусы в Pascal - Pascal
Доброго вечера! Есть несколько числовых ребусов: УДАР + УДАР = ДРАКА БУЛОК + БЫЛО = МНОГО КОКА + КОЛА = ВОДА ...

Решите Следующие арифметические ребусы - Turbo Pascal
2) Решите Следующие арифметические ребусы : а.АВВА=АА^2+ВВ^2 б. КИО*ИО=ТОКИО p.s. задачи ,если можно, с коментариями

множество точек А и арифметические ребусы - Turbo Pascal
1) На плоскости заданы множество точек А и множество окружностей В. Найти две различные точки из А, чтоб проходящая через них прямая...


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

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

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