1,建立字典dict分别记录数字和出现组别的次数:key+value=字符数字+组数,类似下图的表格内的数据记录;
字典根据提供表格数字分组保存的数据
2、利用嵌套双循环分别循环1(外)组别,循环2(内)组内数字,分别对比字典是否存在同一数字,if dict.exist(xx) then dict(xx)=dict(xx)+1记录分别每个数字出现过的组的次数;xx表示某个数字
3、新的循环在字典中,判断dict(xx).value=6的数字,就是组1~组6的交集。分别列入N列相应单元格。
一,要理解什么是交集:求集合1与集合2的交集,就是求出既在集合1又在集合2的元素。
二,求两个集合的交集的程序实现:
采用双重循环,一一比较。
出现下标越界,说明循环的设置有错误,应该并可以检查出错误原因。
Option Explicit'强制显式声明变量Private Sub Command1_Click()
Dim A() As String '数组A,存储集合A中的元素
Dim B() As String '数组B,存储集合B中的元素
Dim S As String '字符串
Dim I As Integer'循环变量
Dim J As Integer'空格数
Dim K As Integer'每个数据元素的起始位置
On Error Resume Next'防止因集合A或集合B的元素为空而出错
S = Trim(Text1.Text)'取集合A中数据
If S <>"" Then '集合A、B中应该有数据,因为要做交集比较嘛
J = 0
K = 1
S = S &" " '为了取得最后一个集合元素而在字符串后加一个空格
For I = 1 To Len(S)
If Mid(S, I, 1) = " " Then '集合元素之间以一个空格区分
J = J + 1 '统计空格数
ReDim Preserve A(J) '重新定义数组,保留原数组中的数据
A(J) = Mid(S, K, I - K) '存储集合元素到数组A
K = I + 1 '确定集合中下一个元素的起始位置
End If
Next I
End If
S = Trim(Text2.Text)'取集合B中数据
If S <>"" Then
J = 0
K = 1
S = S &" "
For I = 1 To Len(S)
If Mid(S, I, 1) = " " Then
J = J + 1
ReDim Preserve B(J)
B(J) = Mid(S, K, I - K) '存储集合元素到数组B
K = I + 1
End If
Next I
End If
'开始逐个比较比较集合A和集合B中的元素,若相同则为交集元素
S = "" '存储交集元素前应该使变量S为空
If UBound(A) >0 And UBound(B) >0 Then
For I = 1 To UBound(A)
For J = 1 To UBound(B)
If B(J) = A(I) Then
S = S &" " &A(I)
Exit For
End If
Next J
Next I
End If
Text3.Text = Trim(S)'去掉交集内容的前后空格并将交集显示出来
End Sub
在窗体内依次添加3个文本框Text1(用于输入集合A内容)、Text2(用于输入集合B内容)、Text3(用于存放交集结果内容)和一个命令按钮Command1,然后将以上代码复制、粘贴、运行即可...集合内容只要满足集合定义可以随便输,数字、字母和标点均可比较……呵呵!
注意:输入集合元素时,集合中的元素之间应该以一个空格分开!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)