如何判断n个自然数中相同个数最多的数是多少?

xxlroad 2001-04-07 03:14:00
请问大家一个问题:
如何判断n个自然数中相同个数最多的数是多少?
比如3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,1
显然是2最多 就 print "2"
这个怎么写?
EMail:xxlroad@yeah.net
QICQ:26603030

...全文
383 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxlroad 2001-06-22
  • 打赏
  • 举报
回复
setmenothing 2001-06-15
  • 打赏
  • 举报
回复
xxlroad(xxlroad):
说说而已嘛!
xxlroad 2001-06-07
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topicview1.asp
xxlroad 2001-06-07
  • 打赏
  • 举报
回复
to: setmenothing(无名)
我怎样给你加分呢?
setmenothing 2001-05-04
  • 打赏
  • 举报
回复
竟然不表示一下?
xxlroad 2001-04-30
  • 打赏
  • 举报
回复
感谢setmenothing(无名).
setmenothing 2001-04-10
  • 打赏
  • 举报
回复
忘了说list1.sorted=true
setmenothing 2001-04-10
  • 打赏
  • 举报
回复
我这个方法耗时20ms, seedling耗时100ms
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
Dim t1 As Double
Dim t() As String
t1 = GetTickCount
txt = "3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4,3,3,2,3,2,2,2,9,2,3,6,2,18,2,77,2,4,5,7,9,0,4,3,6,8,9,0,2,4,6,8,90,6,7,84,6546,546,56,4,6,778,4"
t() = Split(txt, ",")
For i = LBound(t()) To UBound(t())
List1.AddItem t(i)
Next
Dim p As Integer
Dim Max As Integer
Dim C As Integer
For i = 1 To List1.ListCount
If List1.List(i) <> List1.List(i - 1) Then
If C > Max Then
p = i - 1
Max = C
End If
C = 0
Else
C = C + 1
End If
Next
Debug.Print GetTickCount - t1
Debug.Print List1.List(p)
End Sub
losenetway 2001-04-10
  • 打赏
  • 举报
回复
你可以把数据输入到数据库中,
呵呵,那就太简单了;
数据不是很多吗!!!
xxlroad 2001-04-08
  • 打赏
  • 举报
回复
怎么给分啊?
xxlroad 2001-04-08
  • 打赏
  • 举报
回复
先谢谢大家.
Triumph(无为) 你的速度较快为2.220000000001455 S
Seedling(叶子) 你的速度为 3.199999999970894 S
我自己的为 3.916529008664656 S
我用了希尔排序,太慢了,因为数据太多了呀! 而且在判断哪个的时候很浪费时间,只有相同的数>n/2的时候才较快.
xxlroad 2001-04-08
  • 打赏
  • 举报
回复
再次感谢!bucher(bucher) 
怎么给分啊?
xxlroad 2001-04-08
  • 打赏
  • 举报
回复
再次感谢!bucher(bucher) 
怎么给分啊?
bucher 2001-04-08
  • 打赏
  • 举报
回复
在数据很多的情况下Seedling的方法需要跑n*n次,效率欠佳,我写了一个不使用数组的办法,使用了字符处理(我比较擅长字符处理),每次缩小源串来得出出现次数最多的值。

Private Const txt As String = "3,3,2,3,2,2,2,9,2,3,6,2,18,2,77"
Private Sub Command2_Click()
Dim strTmp1 As String
Dim strTmp2 As String
Dim n As Long, m As Long
Dim strCurMax As String
'BeginTimer
strTmp1 = "#" & Replace(txt, ",", "##") & "#"
Do Until strTmp1 = ""
strTmp2 = Left(strTmp1, InStr(2, strTmp1, "#", vbBinaryCompare))
n = UBound(Split(strTmp1, strTmp2))
strTmp1 = Replace(strTmp1, strTmp2, "")
If n > m Then
m = n
strCurMax = strTmp2
'Debug.Print strTmp2
End If
Loop
strCurMax = Replace(strCurMax, "#", "")
'ShowTimer
MsgBox strCurMax
End Sub
NowCan 2001-04-07
  • 打赏
  • 举报
回复
and try!
NowCan 2001-04-07
  • 打赏
  • 举报
回复
look
Seedling 2001-04-07
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim rr() As String
Dim i As Long
Dim j As Long
Dim n As Long
Dim m As Long
Dim p As String

txt = "3,3,2,3,2,2,2,9,2,3,6,2,18,2,77"
i = 0
j = 0
n = 0
m = 0
p = ""

Do

i = i + 1
ReDim Preserve rr(i)
j = InStr(j + 1, txt, ",")

If j > 0 Then
rr(i) = Mid(txt, n + 1, j - n - 1)
Else
rr(i) = Mid(txt, n + 1, Len(txt) - n)

End If
n = j
Loop Until j = 0

For i = 0 To UBound(rr)
n = 0
For j = 0 To UBound(rr)

If rr(j) = rr(i) Then n = n + 1

Next j
If n > m Then m = n: p = rr(i)

Next i

Print p


End Sub
Triumph 2001-04-07
  • 打赏
  • 举报
回复
使用两个动态数组,第一个用于保存数值,第二个用于保存出现的次数,然后遍历所有的数,再和第一个数组内容相比较,如存在相同数值则将第二个数组相应位置的数值加1,否则在第一个数组最后添加该数值,在第二个数组最后添加0。最后在第二个数组内查找最大数,并根据其位置访问第一个数组即可。(此方法的好处是可以知道每个数出现的次数)
tianlon 2001-04-07
  • 打赏
  • 举报
回复
找本数据结构的书看看就知道了
简单点可以
先统计各自然数的个数
再找出数最大的一个
这个程序应该不难

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧