主题:巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和
gulang8229504
[专家分:0] 发布于 2011-09-02 14:09:00
巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
回复列表 (共4个回复)
沙发
moz [专家分:37620] 发布于 2011-09-02 20:10:00
因为和不可能是2了,
所以必定是一个奇数加一个偶数,
就分成两排
135791113151719
2468101214161820
对应位置相加,如为质数,下一位置相加
不是质数,先排列奇数排,
还不是质数,再排列偶数排
是质数,输出结果,下一个排列.
所得和是不是质数,只要把所有可能的质数都放入一个字符串就可以检测到了.
板凳
moz [专家分:37620] 发布于 2011-09-04 02:00:00
事实上,我要收回以上说过的话.
闲来无事,就不管你是在做什么作业了.
在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 楼
gulang8229504 [专家分:0] 发布于 2011-09-04 15:58:00
您好,谢谢您的解答,可是您的思路,我不是很明白,这题如果不用函数调的方法解答,那么有别的方法吗?
4 楼
幽灵密码 [专家分:3510] 发布于 2011-09-10 13:22:00
回溯法
我来回复