' Решение прислал Oleg Vikoulov
' на форме помещаются одна кнопка и одно текстовое поле
Private Sub Command1_Click()
Dim iFishers As Integer ' количество рыбаков
Dim i As Double
Dim ii As Double
Dim rest As Double
iFishers = CDbl(Text1.Text)
' Установка первоначального количества пойманых рыб (= количеству рыбаков)
i = iFishers
Do
' проверяем количество рыб равное i
' rest -временная переменная, в которую
' сначало сохраняется проверяемое количество рыб, а затем
' уменьшающееся количество
rest = i
For ii = iFishers To 1 Step -1
' рыбак просыпается и выкидывает одну рыбу из того что он нашел в сумке с уловом
rest = rest - 1
' проверяем условие, делится ли улов - 1 на три и не равен ли он 0
If (rest Mod iFishers) <> 0 Or rest = 0 Then
' не делится на три
GoTo lblNextDo
else
' улов делится на три, рыбак уходит, просыпается следующий
rest = rest - rest / iFishers
Еnd if
Next ii
MsgBox "Result= " & i
Exit Do
lblNextDo:
' количество рыб i не подходит; пробуем:
i = i + 1
Loop
End Sub
Dim rad As Single 'переменая угла Const R = 2400 'радиус вращения Const EarthR = 500 'радиус Земли Const MoonR = 100 'радиус Луны Const EarthX = 2700 'X-смешение Земли Const EarthY = 2700 'Y-смешение Земли Private Sub Form_Load() 'Чтоб не мелькал If Not Me.AutoRedraw Then Me.AutoRedraw = True 'Чтоб влез If Me.ScaleWidth < EarthX + MoonR + R Then Me.Width = EarthX + MoonR + R + 120 If Me.ScaleHeight < EarthY + MoonR + R Then Me.Height = EarthY + MoonR + R + 405 Timer1.Interval = 10 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() rad = rad - (2 * 3.14) / 100 ' Поворачиваем If rad = -6.28 Then rad = 0 ' обнуляем, чтоб не свихнулся Me.Cls ' зачищаем плацдарм Me.Circle (EarthX, EarthY), EarthR, vbGreen ' рисуем Землю x = EarthX - MoonR + R * Sin(rad) ' X-смешение Луны y = EarthY - MoonR + R * Cos(rad) ' Y-смешение Луны Me.Circle (x, y), MoonR, vbYellow ' рисуем Луну End Sub(решение прислал Alexandr Kholodovitch)
' Пусть i - 5 руб. j - 2 руб. k - 1 руб For i = 0 To 5 For j = 0 To 10 For k = 0 To 10 a = i * 5 + j * 2 + k * 1 b = i + j + k If a = 27 And b = 10 Then Debug.Print i, j, k ' Next k, j, iПри решении задачи мы отбросываем заведомо лишние переборы. Например, 5 рублевых монет не может быть больше 5 штук. Если их будет 6 (5руб*6=30руб), то это противоречит условию задачи
Но можно еще улучшить решение задачи. Если нам известно количество монет i и j, то число k вычисляется как разность
k = 10 - i - jПодставляем это равенство вместо k и получаем, что
a = i * 5 + j * 2 + k * 1=i * 5 + j * 2 + (10 - i - j * 1)=10 + 4 * i + jтем самым мы убираем один внутренний цикл для переменной k и немного изменяем проверочное условие
' Новое решение ' Пусть i - 5 руб. j - 2 руб. k - 1 руб For i = 0 To 5 For j = 0 To 10 a = i * 4 + j + 10 If a = 27 And 10 - i - j >= 0 Then Debug.Print i, j, 10 - i - j Next j, iТем самым, мы сократили намного количество переборок. Данное решение прислал Алексей Михеев (avmiheev@...).
Для решения используем операцию деления по модулю (MOD) и операцию деления нацело. Так как, операция x MOD y дает остаток от деления числа x на y, то разделив двухзначное число на 10 (x MOD 10), мы получаем вторую цифру числа. Соответственно, применяя деление нацело, мы получим первую цифру числа. Зная теперь две цифры, мы легко меняем их местами и получаем разность с помощью функции ABS. Вот так может выглядеть код
x=chislo MOD 10 ' вторая цифра цисла y=chislo \ 10 ' первая цифра числа chislo2=10*x + y ' получим новое требуемое число Print ABS(chislo-chislo2) ' выводим разность chislo - это наше заданное число, которое можно получить преобразованием типов CInt(Text1.Text).
A=A+B B=A-B A=A-B или A=A XOR B B=A XOR B A=A XOR B
A = A & B B = Left(A, Len(A) - Len(B)) A = Right(A, Len(A) - Len(B))Первым правильный ответ прислал(а) Оля(alpha@...)
Dim Fraza$, InvFraza$, XXVal& Dim Cash&, curchar& Cash = Len(Text1.Text) + 1 Fraza = Text1.Text For XXVal = 1 To Cash If Cash = XXVal Then Exit For curchar = Asc(Mid$(Fraza, Cash - XXVal, 1)) If curchar >= 97 And curchar <= 122 Or _ curchar >= 65 And curchar <= 90 Or _ curchar >= 192 Or _ curchar >= 48 And curchar <= 57 _ Then InvFraza = InvFraza + Chr$(curchar) _ Else: Fraza = Mid$(Fraza, 1, Cash - XXVal - 1) & Mid$(Fraza, Cash - XXVal + 1) Next XXVal IF lcase(fraza)=lcase(invfraza) then msgbox "Палиндром"Другое решение
Public Function fPolindrom(s As String) As Boolean Dim i As Integer, c As Integer Dim sCharOne As String * 1, sCharTwo As String * 1 c = Len(s) Do While i < c Do i = i + 1 sCharOne = UCase(Mid$(s, i, 1)) Loop While sCharOne = " " Or sCharOne = "," Or sCharOne = "." Or _ sCharOne = "-" Or sCharOne = "!" Or sCharOne = "?" Or _ sCharOne = ";" Or sCharOne = ":" Or sCharOne = """" Do sCharTwo = UCase(Mid$(s, c, 1)) c = c - 1 Loop While sCharTwo = " " Or sCharTwo = "," Or sCharTwo = "." Or _ sCharTwo = "-" Or sCharTwo = "!" Or sCharTwo = "?" Or _ sCharTwo = ";" Or sCharTwo = ":" Or sCharTwo = """" If sCharOne <> sCharTwo Then Exit Function ' Это самое главное Loop fPolindrom = True End Function
Dim dlina Dim a8 As String Dim x1, x2, x3, y, i dlina = Len(Text1.Text) If dlina - 3 * (dlina \ 3) = 2 Then Text1.Text = "0" & Text1.Text dlina = dlina + 1 End If If dlina - 3 * (dlina \ 3) = 1 Then Text1.Text = "00" & Text1.Text dlina = dlina + 2 End If For i = 1 To dlina - 2 Step 3 x1 = Val(Mid$(Text1.Text, i, 1)) x2 = Val(Mid$(Text1.Text, i + 1, 1)) x3 = Val(Mid$(Text1.Text, i + 2, 1)) y = 4 * x1 + 2 * x2 + x3 a8 = a8 & Mid$(Str$(y), 2, 1) Next i Text2.Text = a8
dlina = Sqr((x1 - x2) ^ 2 + (y1 - y2) ^ 2) Пусть даны координаты двух окружностей Shape1.Left = 300 Shape1.Top = 200 Shape2.Left = 1100 Shape2.Top = 800, тогда dlina = Sqr((Shape1.Left - Shape2.Left) ^ 2 + (Shape1.Top - Shape2.Top) ^ 2) Расстояние между центрами окружностей равно 1000