回 帖 发 新 帖 刷新版面

主题:回答“谁来救救我”--1到20围成圆圈,使相邻差为质数

VBA for EXCEL 代码:
[quote]DefInt A-Z
Sub moz()
s1$ = "ABCDEFGHIJKLMNOPQRST"  '代表从1到20
s2$ = " BC E G   K M   Q S "  '代表20以内的质数
l20 = Len(s1$)
Do
 s3$ = s1$ + Left$(s1$, 1)
 For i = 2 To 21
  If InStr(s2$,Chr$(64+Abs(Asc(Mid$(s3$,i,1))-Asc(Mid$(s3$,i-1,1)))))=0 Then Exit For
 Next
    If i > 21 Then
        For i = 1 To 20
            Debug.Print Asc(Mid$(s3$, i, 1)) - 64;
        Next
        Exit Sub
    End If
  
  Do
    i = i - 1
    l$ = Mid$(s1$, i, 1)
    r$ = Mid$(s1$, i + 1, 1)
    For j = i + 2 To l20
        p$ = Mid$(s1$, j, 1)
        For k = i + 1 To j - 1
            If p$ < Mid$(a$, k, 1) Then
                Mid$(s1$, k, j - k + 1) = p$ + Mid$(s1$, k)
                Exit For
            End If
        Next
    Next
    For j = i + 1 To l20
        p$ = Mid$(s1$, j, 1)
        If p$ > r$ And InStr(s2$, Chr$(64 + Abs(Asc(p$) - Asc(l$)))) > 0 Then
            Mid$(s1$, i + 1, j - i) = p$ + Mid$(s1$, i + 1)
            Exit For
        End If
    Next
  Loop While j > l20 And i > 1
  DoEvents
Loop While i > 0
Debug.Print "无解"
End Sub[/quote]


QB代码:
[quote]DefInt A-Z
s1$ = "ABCDEFGHIJKLMNOPQRST"  '代表从1到20
s2$ = " BC E G   K M   Q S "  '代表20以内的质数
l20 = Len(s1$)
Do
 s3$ = s1$ + Left$(s1$, 1)
 For i = 2 To 21
  If InStr(s2$,Chr$(64+Abs(Asc(Mid$(s3$,i,1))-Asc(Mid$(s3$,i-1,1)))))=0 Then Exit For
 Next
    If i > 21 Then
        For i = 1 To 20
            Print Asc(Mid$(s3$, i, 1)) - 64;
        Next
        End
    End If
  
  Do
    i = i - 1
    l$ = Mid$(s1$, i, 1)
    r$ = Mid$(s1$, i + 1, 1)
    For j = i + 2 To l20
        p$ = Mid$(s1$, j, 1)
        For k = i + 1 To j - 1
            If p$ < Mid$(a$, k, 1) Then
                Mid$(s1$, k, j - k + 1) = p$ + Mid$(s1$, k)
                Exit For
            End If
        Next
    Next
    For j = i + 1 To l20
        p$ = Mid$(s1$, j, 1)
        If p$ > r$ And InStr(s2$, Chr$(64 + Abs(Asc(p$) - Asc(l$)))) > 0 Then
            Mid$(s1$, i + 1, j - i) = p$ + Mid$(s1$, i + 1)
            Exit For
        End If
    Next
  Loop While j > l20 And i > 1
Loop While i > 0
Print "无解"
[/quote]




得出的结果是:
 1  3  5  2  4  6  8  10  7  9  11  13  15  12  19  17  20  18  16  14

回复列表 (共1个回复)

沙发

牛!!!!!!!!!!!!!!!!!!!!!!!111

我来回复

您尚未登录,请登录后再回复。点此登录或注册