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

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

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


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

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

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
Ответы с готовыми решениями:

Есть строчка ""\u0230"", надо из нее сделать строчку "u0230", которая соответствует какойто букве в Unicode.
Есть строчка &quot;&quot;\u0230&quot;&quot;, надо из нее сделать строчку &quot;u0230&quot;, которая соответствует какойто букве в...

Создать массив объектов класса "точка" и класс "круг"
Написать программу, в которой создаются и разрушаются объекты класса, определенного пользователем....

Создать класс "окружность" и два производных класса "цилиндр" и "конус"
Создать класс &quot;окружность&quot; (метод рассчитывает площадь) и два производных класса &quot;цилиндр&quot; и...

Дано натуральное число. Верно ли, что цифра "a" встречается в нем реже, чем цифра "b"?
Дано натуральное число. Верно ли, что цифра a встречается в нем реже, чем цифра b. Заранее спасибо

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30867 / 20189 / 7874
Регистрация: 22.10.2011
Сообщений: 35,049
Записей в блоге: 6
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
30867 / 20189 / 7874
Регистрация: 22.10.2011
Сообщений: 35,049
Записей в блоге: 6
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2015, 16:26

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

Дано натуральное число. Верно ли, что цифра "а" встречается реже чем цифра "b"
дано натуральное число верно ли что цифра &quot;а&quot; встречается реже чем цифра &quot;b&quot;

Наследование. Классы "Точка - Круг - Эллипс"
Если коротко объяснять суть проблемы: Класс tEllipse наследует от tCircle метод LineMove (который...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат"
Реализовать класс Графический объект от которого будут наследоваться классы &quot;круг&quot; и &quot;квадрат&quot;....


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

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

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