15 个解决方案
#1
有人吗?!……5555555……常跪不起……
#2
为什么啊?!大家帮帮忙啊……天哪……
#3
有那么严重吗?
密码多少位?
密码多少位?
#4
Dim Dat(2000000) As Boolean
Private Function Ok(ByVal k As Long) As Boolean
Dim st, st1, st2 As String
Dim i, j As Long
st = CStr(k)
For i = 1 To Len(st)
st1 = Mid(st, 1, i - 1)
st2 = Mid(st, i + 1, Len(st) - i)
For j = 0 To 9
If Dat(CVar(st1 + CStr(j) + st2)) Then
Ok = False
Exit Function
End If
Next j
Next i
Ok = True
End Function
Private Sub print_Answer(ByVal k As Long)
Dim kk As Long
Dim leng As Long
Dim st As String
leng = Len(CStr(k))
For kk = 1 To k
If Dat(kk) Then
st = CStr(kk)
Do Until Len(st) >= leng
st = "0" & st
Loop
List1.AddItem st
End If
Next kk
End Sub
Private Sub Command1_Click()
Dim k, Total As Long
Dat(0) = True
Total = 1
k = 0
ProgressBar1.Min = 0
ProgressBar1.Max = 10000
Do Until Total >= 10000
Do
k = k + 1
Loop Until Ok(k)
Dat(k) = True
Total = Total + 1
ProgressBar1.Value = Total
Loop
print_Answer (k)
End Sub
写了个效率不高的,但是还是可以完成任务的。
Private Function Ok(ByVal k As Long) As Boolean
Dim st, st1, st2 As String
Dim i, j As Long
st = CStr(k)
For i = 1 To Len(st)
st1 = Mid(st, 1, i - 1)
st2 = Mid(st, i + 1, Len(st) - i)
For j = 0 To 9
If Dat(CVar(st1 + CStr(j) + st2)) Then
Ok = False
Exit Function
End If
Next j
Next i
Ok = True
End Function
Private Sub print_Answer(ByVal k As Long)
Dim kk As Long
Dim leng As Long
Dim st As String
leng = Len(CStr(k))
For kk = 1 To k
If Dat(kk) Then
st = CStr(kk)
Do Until Len(st) >= leng
st = "0" & st
Loop
List1.AddItem st
End If
Next kk
End Sub
Private Sub Command1_Click()
Dim k, Total As Long
Dat(0) = True
Total = 1
k = 0
ProgressBar1.Min = 0
ProgressBar1.Max = 10000
Do Until Total >= 10000
Do
k = k + 1
Loop Until Ok(k)
Dat(k) = True
Total = Total + 1
ProgressBar1.Value = Total
Loop
print_Answer (k)
End Sub
写了个效率不高的,但是还是可以完成任务的。
#5
10W个,位数至少是7位的。
#6
14的密码……跪求……
#7
如果密码位数没有限制,有一种很快速简单的方法:
生成5个两位数字组,保证同一组的任意两个数字的十位和个位都不相等。如(00,11,22,33,44……)、(01,12,23,34……90)等,每个数字组有10个数字,然后用一个5重循环分别从这5个数字组中依次取数字进行组合,可生成10W个10位数字并满足要求。
生成5个两位数字组,保证同一组的任意两个数字的十位和个位都不相等。如(00,11,22,33,44……)、(01,12,23,34……90)等,每个数字组有10个数字,然后用一个5重循环分别从这5个数字组中依次取数字进行组合,可生成10W个10位数字并满足要求。
#8
或都生成两个5位数字组,都包含所有的5位数字(00000也看作是5位数字),然后打乱顺序,再用一个二重循环分别从两个组中取数字并组合在一起。
#9
如果把问题改为,尽量小的10w个 两两之间至少要有两位不一样 的自然数也许更由意思。
#10
用随机数!
每位都用随机数!
比如7位pw[0..7]
每位用随机数的话,重复性是(1/10)^7
每位都用随机数!
比如7位pw[0..7]
每位用随机数的话,重复性是(1/10)^7
#11
用随机数需要对每个产生的数进行一次检验(与已有的所有数进行比较),速度比较慢。如果对位数没有要求的话,还是应该用更快的方法。
还有一种方法,可以生成9位符合要求的数字来:
在0-9中选择9个数字(不重复),求出他们的10W个排列就行了。在元素不重复时,任意两个排列都至少有两位不同,9个元素的排列总数有36W多。
#12
最简单的办法:
从0-100000,其中,用0补足前面的位置。然后再做一个函数,用映射打乱每位置就好。比如每1位换到第5位,第2位换到第7位,。。。。
从0-100000,其中,用0补足前面的位置。然后再做一个函数,用映射打乱每位置就好。比如每1位换到第5位,第2位换到第7位,。。。。
#13
找660个不同的质素,拆成330+330两个集合,组织一个2重循环,分别从它们中间各取1个进行相乘,就可得到100000个以上且各不相同的数,再在每个数上模加一个大数,就差不多了.
,
,
#14
楼上怎么证明,?
这好像是个组合问题,怎么用数论方法来解决
这好像是个组合问题,怎么用数论方法来解决
#15
不同的素数相乘,仅仅是为了保证结果不同,不是专门的数论方法.
#1
有人吗?!……5555555……常跪不起……
#2
为什么啊?!大家帮帮忙啊……天哪……
#3
有那么严重吗?
密码多少位?
密码多少位?
#4
Dim Dat(2000000) As Boolean
Private Function Ok(ByVal k As Long) As Boolean
Dim st, st1, st2 As String
Dim i, j As Long
st = CStr(k)
For i = 1 To Len(st)
st1 = Mid(st, 1, i - 1)
st2 = Mid(st, i + 1, Len(st) - i)
For j = 0 To 9
If Dat(CVar(st1 + CStr(j) + st2)) Then
Ok = False
Exit Function
End If
Next j
Next i
Ok = True
End Function
Private Sub print_Answer(ByVal k As Long)
Dim kk As Long
Dim leng As Long
Dim st As String
leng = Len(CStr(k))
For kk = 1 To k
If Dat(kk) Then
st = CStr(kk)
Do Until Len(st) >= leng
st = "0" & st
Loop
List1.AddItem st
End If
Next kk
End Sub
Private Sub Command1_Click()
Dim k, Total As Long
Dat(0) = True
Total = 1
k = 0
ProgressBar1.Min = 0
ProgressBar1.Max = 10000
Do Until Total >= 10000
Do
k = k + 1
Loop Until Ok(k)
Dat(k) = True
Total = Total + 1
ProgressBar1.Value = Total
Loop
print_Answer (k)
End Sub
写了个效率不高的,但是还是可以完成任务的。
Private Function Ok(ByVal k As Long) As Boolean
Dim st, st1, st2 As String
Dim i, j As Long
st = CStr(k)
For i = 1 To Len(st)
st1 = Mid(st, 1, i - 1)
st2 = Mid(st, i + 1, Len(st) - i)
For j = 0 To 9
If Dat(CVar(st1 + CStr(j) + st2)) Then
Ok = False
Exit Function
End If
Next j
Next i
Ok = True
End Function
Private Sub print_Answer(ByVal k As Long)
Dim kk As Long
Dim leng As Long
Dim st As String
leng = Len(CStr(k))
For kk = 1 To k
If Dat(kk) Then
st = CStr(kk)
Do Until Len(st) >= leng
st = "0" & st
Loop
List1.AddItem st
End If
Next kk
End Sub
Private Sub Command1_Click()
Dim k, Total As Long
Dat(0) = True
Total = 1
k = 0
ProgressBar1.Min = 0
ProgressBar1.Max = 10000
Do Until Total >= 10000
Do
k = k + 1
Loop Until Ok(k)
Dat(k) = True
Total = Total + 1
ProgressBar1.Value = Total
Loop
print_Answer (k)
End Sub
写了个效率不高的,但是还是可以完成任务的。
#5
10W个,位数至少是7位的。
#6
14的密码……跪求……
#7
如果密码位数没有限制,有一种很快速简单的方法:
生成5个两位数字组,保证同一组的任意两个数字的十位和个位都不相等。如(00,11,22,33,44……)、(01,12,23,34……90)等,每个数字组有10个数字,然后用一个5重循环分别从这5个数字组中依次取数字进行组合,可生成10W个10位数字并满足要求。
生成5个两位数字组,保证同一组的任意两个数字的十位和个位都不相等。如(00,11,22,33,44……)、(01,12,23,34……90)等,每个数字组有10个数字,然后用一个5重循环分别从这5个数字组中依次取数字进行组合,可生成10W个10位数字并满足要求。
#8
或都生成两个5位数字组,都包含所有的5位数字(00000也看作是5位数字),然后打乱顺序,再用一个二重循环分别从两个组中取数字并组合在一起。
#9
如果把问题改为,尽量小的10w个 两两之间至少要有两位不一样 的自然数也许更由意思。
#10
用随机数!
每位都用随机数!
比如7位pw[0..7]
每位用随机数的话,重复性是(1/10)^7
每位都用随机数!
比如7位pw[0..7]
每位用随机数的话,重复性是(1/10)^7
#11
用随机数需要对每个产生的数进行一次检验(与已有的所有数进行比较),速度比较慢。如果对位数没有要求的话,还是应该用更快的方法。
还有一种方法,可以生成9位符合要求的数字来:
在0-9中选择9个数字(不重复),求出他们的10W个排列就行了。在元素不重复时,任意两个排列都至少有两位不同,9个元素的排列总数有36W多。
#12
最简单的办法:
从0-100000,其中,用0补足前面的位置。然后再做一个函数,用映射打乱每位置就好。比如每1位换到第5位,第2位换到第7位,。。。。
从0-100000,其中,用0补足前面的位置。然后再做一个函数,用映射打乱每位置就好。比如每1位换到第5位,第2位换到第7位,。。。。
#13
找660个不同的质素,拆成330+330两个集合,组织一个2重循环,分别从它们中间各取1个进行相乘,就可得到100000个以上且各不相同的数,再在每个数上模加一个大数,就差不多了.
,
,
#14
楼上怎么证明,?
这好像是个组合问题,怎么用数论方法来解决
这好像是个组合问题,怎么用数论方法来解决
#15
不同的素数相乘,仅仅是为了保证结果不同,不是专门的数论方法.