Между цифрами числа вставить 6 операций умножения или сложения - VB
Формулировка задачи:
Дано 7-значное натуральное рандомное число.
Надо между цифрами этого числа вставить 6 операций
умножения или сложения так, чтобы при выполнении
этих операций над цифрами получалось максимально
возможное число. Важное условие: полагается что
умножение и сложение одного приоритета.
Вынести на форму само число, число со вставленными
знаками операций и максимальный результат этих операций.
Меня конечно заинтересовала эта задача с другим условием
Приоритет умножения должен быть выше сложения. Но
это оказалось гораздо сложней. И я привожу решение в той
формулировке, в которой эта задача дана. И всё-таки.
Так ли это сложно? Всего 6 операций. Число умножений легко
сосчитать. Единственная проблема: куда девать результат??
Я сейчас пытаюсь сделать Стек для вычисления арифметического
выражения. Путей много, а результата нет ....
Листинг программы
- Option Explicit
- Dim i%, i1%, i2%, i3%, i4%, i5%, i6%
- Dim n&, o&, max&
- Dim s13 As String, sN As String, tN As String
- Dim a(1 To 7) As String
- Dim b(1 To 7) As Integer
- Private Sub cmdD_Click()
- Randomize
- n = 9000000 * Rnd + 1000000
- sN = LTrim(Str(n))
- For i = 1 To 7
- a(i) = Mid(sN, i, 1)
- b(i) = Val(a(i))
- Next i
- s13 = a(1)
- For i = 2 To 7
- s13 = s13 + " " + a(i)
- Next i
- max = 0
- For i1 = 0 To 1
- For i2 = 0 To 1
- For i3 = 0 To 1
- For i4 = 0 To 1
- For i5 = 0 To 1
- For i6 = 0 To 1
- o = b(1)
- Mid(s13, 2, 1) = IIf(i1 = 0, "+", "*")
- Mid(s13, 4, 1) = IIf(i2 = 0, "+", "*")
- Mid(s13, 6, 1) = IIf(i3 = 0, "+", "*")
- Mid(s13, 8, 1) = IIf(i4 = 0, "+", "*")
- Mid(s13, 10, 1) = IIf(i5 = 0, "+", "*")
- Mid(s13, 12, 1) = IIf(i6 = 0, "+", "*")
- o = IIf(i1 = 0, o + b(2), o * b(2))
- o = IIf(i2 = 0, o + b(3), o * b(3))
- o = IIf(i3 = 0, o + b(4), o * b(4))
- o = IIf(i4 = 0, o + b(5), o * b(5))
- o = IIf(i5 = 0, o + b(6), o * b(6))
- o = IIf(i6 = 0, o + b(7), o * b(7))
- If o > max Then
- max = o
- tN = s13
- End If
- Next i6, i5, i4, i3, i2, i1
- Print sN
- Print tN
- Print "Max="; max
- End Sub
Решение задачи: «Между цифрами числа вставить 6 операций умножения или сложения»
textual
Листинг программы
- Private Sub GetOp()
- Dim num As Long
- Dim res As String
- Dim value As Long
- Randomize
- value = Int(Rnd * 9) + 1
- For num = 0 To 5
- value = value * 10 + Int(10 * Rnd)
- Next
- Do
- num = value Mod 10
- value = value \ 10
- If num < 2 Then res = "+" & num & res Else res = "*" & num & res
- Loop While value > 9
- Debug.Print IIf(value > 2, value & "*" & Mid$(res, 2), value & "+" & Mid$(res, 2))
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д