回 帖 发 新 帖 刷新版面

主题:巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和

巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。

回复列表 (共4个回复)

沙发

因为和不可能是2了,
所以必定是一个奇数加一个偶数,
就分成两排
135791113151719
2468101214161820
对应位置相加,如为质数,下一位置相加
不是质数,先排列奇数排,
还不是质数,再排列偶数排
是质数,输出结果,下一个排列.
所得和是不是质数,只要把所有可能的质数都放入一个字符串就可以检测到了.

板凳

事实上,我要收回以上说过的话.
闲来无事,就不管你是在做什么作业了.
在EXCEL里面不需要担心溢出问题.


DefInt A-Z
Sub moz2()
s2$=Chr$(2)+Chr$(3)+Chr$(4)+Chr$(5)+Chr$(6)+Chr$(7)+Chr$(8)+Chr$(9)+Chr$(10)+Chr$(11)+Chr$(12)+Chr$(13)+Chr$(14)+Chr$(15)+Chr$(16)+Chr$(17)+Chr$(18)+Chr$(19)+Chr$(20)
s3$ = Chr$(3) + Chr$(5) + Chr$(7) + Chr$(11) + Chr$(13) + Chr$(17) + Chr$(19) + Chr$(23) + Chr$(29) + Chr$(31) + Chr$(37)
adds Chr$(1), s2$, s3$, 1
End Sub
Sub adds(x1$, x2$, x3$, r)
    If x2$ = "" And InStr(x3$, Chr$(r + 1)) > 0 Then
        For i = 1 To Len(x1$)
            z$ = z$ + Str$(Asc(Mid$(x1$, i, 1)))
        Next
        Debug.Print z$
    Else
        For i = 1 To Len(x2$)
            If InStr(x3$,Chr$(r+Asc(Mid$(x2$,i,1))))>0 Then adds x1$+Mid$(x2$,i,1),Left$(x2$,i-1)+Mid$(x2$,i+1),x3$,Asc(Mid$(x2$,i,1))
        Next
    End If
End Sub

3 楼

您好,谢谢您的解答,可是您的思路,我不是很明白,这题如果不用函数调的方法解答,那么有别的方法吗?

4 楼

回溯法

我来回复

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