Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 44
1

Ребус "ТОЧКА + КРУГ = КОНУС" где каждой букве соответствует определённая цифра.

20.10.2015, 15:30. Показов 1823. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Из названия думаю всем понятно, что нужно мне решить ребус с помощью МНОЖЕСТВ (!)

Примерное условие задачи. Каждой букве соответствует определённая цифра. Пример решения МУХА+МУХА = СЛОН

Pascal
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
program a11;
 
type
 mn= set of 0..9;
 
var
 n1,n2,n: integer;
 m,y,x,a: 0..9;
 a1,a2,a3,a4: 0..9;
 s1,s2: mn;
 
 procedure print(x,y: integer);
 begin
  writeln(x:5);
  writeln('+');
  writeln(x:5);
  writeln('_____');
  writeln(y:5);
 end;
 
begin
 n:=0;
 s1:=[];
 s2:=[];
 
 for m:=1 to 4 do
 begin
  s1:=s1+[m];
  for y:=0 to 9 do
  if not (9 in s1) then
  begin
   s1:=s1+[y];
   for x:=0 to 9 do
   if not (x in s1) then
   begin
   s1:=s1+[x];
   for a:=1 to 9 do
   if not (a in s1) then
   begin
   s1:=s1+[a];
   n1:=m*1000+100*y+10*x+a;
   n2:=2*n1;
   a1:=n2 div 1000;
   a2:=n2 div 100 mod 10;
   a3:=n2 div 10 mod 10;
   a4:=n2 mod 10;
   s2:=[a1,a2,a3,a4];
   if (s1*s2=[]) and ([a1]*[a2]*[a3]*[a4]=[])
   then
   begin
   n:=n+1;
   print(n1,n2);
   end;
   s1:=s1-[a];
   end;
   s1:=s1-[x];
   end;
   s1:=s1-[y];
   end;
   s1:=s1-[m];
   end;
   writeln('n=',n);
   end.
   write('hellow')
   end.
Мне же нужно ТОЧКА + КРУГ = КОНУС

Вот, что у меня получается:

Pascal
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
Program rebus;
Type mn = set of 0..9;
var t,o,ch,k,a,r,u,g,k1,o1,n1,u1,s1:0..9;
    mn1,mn2,mn3:mn;
    num1,num2,sum:integer;
begin
 
For t:=1 to 9 do
If not (t in mn1)
 Then begin
 mn1:=mn1+[t];
 For o:=0 to 9 do
 If not (o in mn1)
  Then begin
  mn1:=mn1+[o];
  For ch:=0 to 9 do
  If not (ch in mn1)
   Then begin
   mn1:=mn1+[ch];
   For k:=1 to 9 do
   If (not (k in mn1)) and (not (k in mn2))
    Then begin
    mn1:=mn1+[k];
    mn2:=mn2+[k];
    For a:=0 to 9 do
    If not (a in mn1)
     Then begin
     mn1:=mn1+[a];
     For r:=0 to 9 do
     If not (r in mn2)
      Then begin
      mn2:=mn2+[r];
      For u:=0 to 9 do
      If not (u in mn2)
       Then begin
       mn2:=mn2+[u];
       For g:=0 to 9 do
       If not (g in mn2)
        Then begin
        mn2:=mn2+[g];
        num1:=t*10000+o*1000+ch*100+k*10+a;
        num2:=k*1000+r*100+u*10+g;
        sum:=num1+num2;
        k1:=sum div 10000 mod 10;
        o1:=sum div 1000 mod 10;
        n1:=sum div 100 mod 10;
        u1:=sum div 10 mod 10;
        s1:=sum mod 10;
        mn3:= [k1,o1,n1,u1,s1];
        If (mn1*mn2 = [k]) and (mn1*mn3 = [k,o]) and (mn2*mn3 = [u,k]) and ([k1]*[o1]*[n1]*[u1]*[s1]=[])
        Then writeln(num1,' + ',num2,' = ',sum);
        
        
        
        
        mn2:=mn2-[g];
        end;
       mn2:=mn2-[u];
       end;
      mn2:=mn2-[r];
      end;
     mn1:=mn1-[a]
     end;
    mn1:=mn1-[k];
    mn2:=mn2-[k];
    end;
   mn1:=mn1-[ch];
   end;
  mn1:=mn1-[o];
  end;
 mn1:=mn1-[t];
 end;
end.
Но дело в том, что, как всем известно, у элементов множества нет индекса, поэтому такая проверка условия мне ,вроде как, не подходит т.к. вот к примеру один из ответов 43861 + 6702 = 50563 (ТОЧКА + КРУГ = 5У5КО), а должно было бы быть (63Н0С), но преподаватель говорит, чтобы я так решил, нужно как-то усовершенствовать условный оператор...

Знаю, как решить без множеств, но увы преподаватель не принимает задачу.

Добавлено через 25 минут
Pascal
1
2
If (n1<>s1) and (k=k1) and (o=o1) and (u=u1) and ([k1]*[o1]*[n1]*[u1]*[s1]=[ ]) and (mn1*mn2 = [k]) and (mn1*mn3 = [k,o]) and (mn2*mn3 = [u,k])
        Then writeln(num1,' + ',num2,' = ',sum);
Вот такое усовершенствование (хоть преподаватель и не разрешил этого делать) приводит к странным ответам и наводит на размышления. Почему ([k1]*[o1]*[n1]*[u1]*[s1]=[ ]) не ограничивает повторяющиеся буквы в ответе(конус), а выводит ответы такого типа:
85796 + 9304 = 95100
85796 + 9314 = 95110
85796 + 9324 = 95120 (последний правильный)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2015, 15:30
Ответы с готовыми решениями:

Описать иерархию классов Точка, Круг, Конус
Добрый вечер, помогите пожалуйста реализовать данную задачу, неделю мучаюсь ничего не выходит. Вот...

Дано n целых цифр от 0 до 9. Где первая цифра соответствует разряду единиц, вторая - десяткам, а n-ая цифра соответсвует
Дано n целых цифр от 0 до 9. Где первая цифра соответствует разряду единиц, вторая - десяткам, а...

Каждой букве алфавита соответствует двузначное число
14 70 14 65 36 59 47 82 34, 40 58 40 58 42 36. 17 95 34 45 67 34-65 40 17 95 34 45 67 34 32 36 45...

Расшифровать слово, каждой букве алфавита соответствует число
33 73 57 23 53 16 73 56 5 39

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.10.2015, 15:31 2
Pascal
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
{
  TOChKA+KRUG=KONUS;
}
var
  t, o, ch, k, a, r, u, g, n, s: 0 .. 9;
 
  dig : set of 0..9;
  sum, konus: longint;
 
begin
  for t:=0 to 9 do begin
    include(dig,t);
    for o:=0 to 9 do if not (o in dig) then begin
      include(dig,o);
      for ch:=0 to 9 do if not (ch in dig) then begin
        include(dig,ch);
        for k:=0 to 9 do if not (k in dig) then begin
          include(dig,k);
          for a:=0 to 9 do if not (a in dig) then begin
            include(dig,a);
            for r:=0 to 9 do if not (r in dig) then begin
              include(dig,r);
              for u:=0 to 9 do if not (u in dig) then begin
                include(dig,u);
                for g:= 0 to 9 do if not (g in dig) then begin
                  include(dig, g);
                  for n := 0 to 9 do if not (n in dig) then begin
                    include(dig, n);
                      for s := 0 to 9 do if not (s in dig) then begin
                        include(dig, s);
 
    {
      Именно здесь происходит проверка, удовлетворяют ли
      значения переменных, полученные на этом шаге заданному ребусу
    }
    sum := t*10000 + (o+k)*1000 + (ch+r)*100 + (k+u)*10 + (a+g);
    konus := k*10000+o*1000+n*100+u*10+s;
 
    {
      Если условие выполнено - напечатать ответ
    }
    if sum = konus then
      writeln(':', t,o,ch,k,a,'+',k,r,u,g,'=', k,o,n,u,s);
      
                        exclude(dig, s);
                      end;
                    exclude(dig, n)
                  end;
                  exclude(dig, g);
                end;
                exclude(dig,u);
              end;
              exclude(dig,r);
            end;
            exclude(dig,a);
          end;
          exclude(dig,k);
        end;
        exclude(dig,ch);
      end;
      exclude(dig,o);
    end;
    exclude(dig,t);
  end;
end.
Все ответы:
Кликните здесь для просмотра всего текста
:80495+9637=90132
:80495+9736=90231
:80496+9735=90231
:80497+9635=90132
:80594+9637=90231
:80597+9634=90231
:80694+9537=90231
:80695+9437=90132
:80697+9435=90132
:80697+9534=90231
:80795+9436=90231
:80796+9435=90231
:81395+9647=91042
:81397+9645=91042
:81496+9527=91023
:81497+9526=91023
:81593+9647=91240
:81594+9726=91320
:81596+9427=91023
:81596+9724=91320
:81597+9426=91023
:81597+9643=91240
:81693+9547=91240
:81695+9347=91042
:81697+9345=91042
:81697+9543=91240
:81794+9526=91320
:81796+9524=91320
:82394+9657=92051
:82394+9756=92150
:82396+9754=92150
:82397+9654=92051
:82493+9657=92150
:82496+9517=92013
:82497+9516=92013
:82497+9653=92150
:82594+9716=92310
:82596+9417=92013
:82596+9714=92310
:82597+9416=92013
:82693+9457=92150
:82694+9357=92051
:82697+9354=92051
:82697+9453=92150
:82794+9356=92150
:82794+9516=92310
:82796+9354=92150
:82796+9514=92310
:83295+9746=93041
:83296+9745=93041
:83495+9607=93102
:83495+9706=93201
:83496+9705=93201
:83497+9605=93102
:83594+9607=93201
:83597+9604=93201
:83694+9507=93201
:83695+9407=93102
:83697+9405=93102
:83697+9504=93201
:83795+9246=93041
:83795+9406=93201
:83796+9245=93041
:83796+9405=93201
:84295+9736=94031
:84296+9735=94031
:84395+9617=94012
:84397+9615=94012
:84593+9617=94210
:84597+9613=94210
:84693+9517=94210
:84695+9317=94012
:84697+9315=94012
:84697+9513=94210
:84795+9236=94031
:84796+9235=94031
:85394+9627=95021
:85394+9726=95120
:85396+9724=95120
:85397+9624=95021
:85493+9627=95120
:85497+9623=95120
:85693+9427=95120
:85694+9327=95021
:85697+9324=95021
:85697+9423=95120
:85794+9326=95120
:85796+9324=95120
0
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 44
20.10.2015, 15:56  [ТС] 3
volvo, вы бы хоть прочитали, что я писал. Мне нужно искать условие пересечением множеств.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.10.2015, 16:20 4
Цитата Сообщение от Deryagtev Посмотреть сообщение
нужно мне решить ребус с помощью МНОЖЕСТВ
Про пересечение - ни слова, а множества - если что - у меня и используются. В 7-ой строке описывается. В следующий раз будьте добры задавать вопросы сразу так, как нужно, а не так, как захотела левая рука.
0
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 44
20.10.2015, 16:26  [ТС] 5
volvo,
Цитата Сообщение от Deryagtev Посмотреть сообщение
Мне же нужно ТОЧКА + КРУГ = КОНУС
Цитата Сообщение от Deryagtev Посмотреть сообщение
Пример решения МУХА+МУХА = СЛОН
Цитата Сообщение от Deryagtev Посмотреть сообщение
Но дело в том, что, как всем известно, у элементов множества нет индекса, поэтому такая проверка условия мне ,вроде как, не подходит т.к. вот к примеру один из ответов 43861 + 6702 = 50563 (ТОЧКА + КРУГ = 5У5КО), а должно было бы быть (63Н0С), но преподаватель говорит, чтобы я так решил, нужно как-то усовершенствовать условный оператор...
Пожалуйста. Посмотрите первый пример и перечитайте снова.

А если вы не читаете код, а просто скидываете чужое решение, то уж извините, но вы виноваты сами.
0
20.10.2015, 16:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2015, 16:26
Помогаю со студенческими работами здесь

Расшифровать текст, каждой букве соответствует двузначное число
14 70 14 65 36 59 47 82 34, 40 58 40 58 42 36.17 95 34 45 67 34-65 40 17 95 34 45 67 34 32 36 45 67...

Расшифровать. Каждой букве алфавита соответствует двузначное число
Да да я смотрел все темы в поиске и все равно ниче не понял. 81 49 86 49 12 73 92 50 81 50 15 50...

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

В игре Scrabble каждой букве соответствует определенное число очков
В игре Scrabble каждой букве соответствует определенное число очков. Общий балл слова – сумма...

Расшифровать текст. Каждой букве алфавита соответствует двузначное число
14 70 14 65 36 59 47 82 34, 40 58 40 58 42 36.17 95 34 45 67 34-65 40 17 95 34 45 67 34 32 36 45 67...

Расшифровать текст. Каждой букве алфавита соответствует двузначное число
Добрый день!) Уже битый час не могу расшифровать текст, применяла частотный анализ букв русского...

Расшифровать текст. Каждой букве алфавита соответствует двузначное число
58 62 32 39 99 31 29 58 72 62 99 58 13 54 15 56 31 63 39 72 84 15 13 56 77 15 82 56 56 56 58 54 29...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru