Кому не лень ...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Кому не лень ...

Сообщение Daz » 11.10.2004 (Пн) 10:52

Имеется головоломка : Квадратный корень из слова
"феодализм" = "еедди". Каждая из девяти букв слова
"феодализм" обозначает какую-то цифру(нуль не учитывается).
Надо найти эти числа.

Я посредством For..Next нашел эти цисла: 523814769 и 22887. Но
компьютер думал аж 25 минут! (Код прилагается)

Подскажите,пожалуйста, каким образом можно решить эту
задачу быстрее ?

Код: Выделить всё

Private Sub Command1_Click()
For f = 1 To 9
For e = 1 To 9
For o = 1 To 9
For d = 1 To 9
For a = 1 To 9
For l = 1 To 9
For i = 1 To 9
For z = 1 To 9
For m = 1 To 9

If 100000000 * f + 10000000 * e + 1000000 * o + 100000 * d + 10000 * a + 1000 * l + 100 * i + 10 * z + m = (10000 * e + 1000 * e + 100 * d + 10 * d + i) ^ 2 Then
List1.AddItem 100000000 * f + 10000000 * e + 1000000 * o + 100000 * d + 10000 * a + 1000 * l + 100 * i + 10 * z + m
List2.AddItem 10000 * e + 1000 * e + 100 * d + 10 * d + i
End If

Next
Next
Next
Next
Next
Next
Next
Next
Next
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.10.2004 (Пн) 11:18

Ты делаешь сплошной перебор. А вместо этого стоимло бы учесть тот факт, что в "корне" есть одинаковые цифры, да ещё парами, да ещё подряд. Тогда нужно было бы перебрать (если исключить 0 как вариант) всего 9*9*9 комбинаций :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Сообщение Daz » 11.10.2004 (Пн) 11:27

GSerg писал(а):Ты делаешь сплошной перебор. А вместо этого стоимло бы учесть тот факт, что в "корне" есть одинаковые цифры, да ещё парами, да ещё подряд. Тогда нужно было бы перебрать (если исключить 0 как вариант) всего 9*9*9 комбинаций :)


Можно код, please :?:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.10.2004 (Пн) 11:50

А не стыдно? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.10.2004 (Пн) 12:09

Код: Выделить всё
Option Explicit

Private Sub Form_Load()
  Dim i As Long, j As Long, k As Long, s() As Byte
 
  Const MIN_NUMBER As Long = 1
  Const MAX_NUMBER As Long = 9
 
  Me.AutoRedraw = True
 
  For i = MIN_NUMBER To MAX_NUMBER
    For j = MIN_NUMBER To MAX_NUMBER
      If j <> i Then
        For k = MIN_NUMBER To MAX_NUMBER
          If k <> j And k <> i Then
            s = StrConv(CStr((i * 11000 + j * 110 + k) ^ 2), vbFromUnicode)
            If s(1) = vbKey0 + i Then
              If s(3) = vbKey0 + j Then
                If s(6) = vbKey0 + k Then
                  'В принципе, здесь нужно добавить проверку того,
                  'что все оставшиеся цифры разные.
                  'Но этот пример работает и без неё.
                  Me.Print StrConv(s, vbUnicode), CStr(i * 11000 + j * 110 + k)
                End If
              End If
            End If
          End If
        Next
      End If
    Next
  Next
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Daz
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 27.12.2003 (Сб) 23:22

Сообщение Daz » 11.10.2004 (Пн) 12:15

GSerg писал(а):А не стыдно? :)


Стыдно, но очень надо :oops:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 1

    TopList