В магическом квадрате 3х3 расставить 9 степеней - VB

Узнай цену своей работы

Формулировка задачи:

в магическом квадрате 3х3 расставить 9 степеней чиста 2 таким образом, чтобы произведение чисел, стоящих в каждой строке, столбце и на диагонали были равны.

Решение задачи: «В магическом квадрате 3х3 расставить 9 степеней»

textual
Листинг программы
Option Explicit
Dim F As Boolean, SSS As String
 
Private Sub Command1_Click()
    F = false
    SSS = ""
    Call WeTrastInVB("123456789")
    MsgBox IIf(F, SSS, "Таких магических квадратов не существует!")
End Sub
 
Private Function WeTrastInVB(S As String, Optional SS As String = "") As Boolean
  Dim i As Integer
  If Len(S) = 1 Then
     If TryMagicSquare(SS & S) Then F = True
  Else
     For i = 1 To Len(S)
         WeTrastInVB Left$(S, i - 1) & Mid$(S, i + 1), SS & Mid$(S, i, 1)
     Next
  End If
End Function
 
Private Function TryMagicSquare(ByVal S As String) As Boolean
    Dim i As Integer, j As Integer, k As Integer
    Const n As Integer = 3 'n = UBound(A, 1)
    Dim A(1 To n, 1 To n) As Long, P(1 To 4) As Long
    For i = 1 To n
          For j = 1 To n
              k = k + 1
              A(i, j) = 2 ^ CInt(Mid(S, k, 1))
          Next j
    Next i
    P(1) = 1: P(2) = 1
    For i = 1 To n
        P(1) = P(1) * A(i, i)         'произведение элементов главной диагонали
        P(2) = P(2) * A(i, n - i + 1) 'произведение элементов побочной диагонали
    Next i
    If P(1) <> P(2) Then Exit Function
    For i = 1 To n
         P(3) = 1: P(4) = 1
         For j = 1 To n
               P(3) = P(3) * A(i, j) 'произведение элементов i-ой строки
               P(4) = P(4) * A(j, i) 'произведение элементов i-го столбца
         Next j
         If (P(1) <> P(3)) Or (P(1) <> P(4)) Then Exit Function
    Next i
    SSS = SSS & strMagicSquare(A) & vbCrLf
    TryMagicSquare = True
End Function
 
Private Function strMagicSquare(ByRef A() As Long) As String
    Dim i As Integer, j As Integer, S As String
    Dim n As Integer: n = UBound(A, 1)
    For i = 1 To n
          For j = 1 To n
               S = S & A(i, j) & vbTab
          Next j
          S = S & vbCrLf
       Next i
       strMagicSquare = S
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы