VB一维数组a(14)中,有一串不规则的数字,例如3 5 8 1 3 2 4 5 6 6 5 4 1 3 2 ,如何能计算出有多少个相同的数字?
print 有2个3
有3个5
有1个8
有2个1
以此类推…
求高手解答,小弟不胜感激
For i = 0 To n
For j = 0 To n
If d(j, 1) -9999 Then
If a(i) = d(j, 1) Then
d(j, 2) = d(j, 2) + 1
Exit For
End If
Else
d(j, 1) = a(i)
d(j, 2) = 1
Exit For
End If
Next j
Next i
这一段不太懂,能加个注释吗?
说明:d是二维数组,第1维度存放找到的数字,第2维度存放找到了该数字几次。
以“3 5 8 1 3 2 4 5 6 6 5 4 1 3 2”为例;
d(1, 1)里存放 3,d(1, 2)里存放 3,表示 3个3
d(2,1))里存放 5,d(2, 2)里存放 3,表示 3个5
d(3,1))里存放 8,d(3, 2)里存放 1,表示 1个8
d(4,1))里存放 1,d(4, 2)里存放 2,表示 2个1
d(5,1))里存放 2,d(5, 2)里存放 2,表示 2个2
d(6,1))里存放 4,d(6, 2)里存放 2,表示 2个4
d(7,1))里存放 6,d(7, 2)里存放 2,表示 2个6
代码是从左到右扫描字符串(其实已经存入数组a()),
For i = 0 To n
For j = 0 To n
If d(j, 1) -9999 Then '因为d()数组的第一维初始化都存放-9999表示还没有开始扫描
如果不等于-9999,那么就是已经存放了找到的某个数字
If a(i) = d(j, 1) Then '这里,如果现在的a(i) 与 已经找到的某个数字相同
d(j, 2) = d(j, 2) + 1 '那么,其第2维要加1,表示又一次找到的相同的数字
Exit For '既然找到了,内循环可以结束了
End If
Else '这是对应d()数组的第一维等于初始化的值 -9999
d(j, 1) = a(i) '要这样理解,会运行到这里是基于:这个a(i)是第一次出现
d(j, 2) = 1 '这就是第一次出现的赋值
Exit For
End If
Next j
Next i
Do
j = a(i) Mod 10
b(j) = b(j) + 1
x = x \ 10
Loop Until x = 0
有点看不懂这些是怎么用的,请继续指教
Do
j = a(i) Mod 10 '取个位数字
b(j) = b(j) + 1 ‘取到的数字个数加1
x = x \ 10 ’去掉已取过的数字
Loop Until x = 0 ‘直到所有的数字都处理完
你要还不清楚的话,随便弄个数字,设A(i)=23或是1234都行的。
好像两位数以上就不行了,加入我的那串数字是1 2 3 3 10 10 200 200,能做到
print 1个1
1个2
2个3
2个10
2个200
吗?
For i = 0 To 9
If b(i) > 0 Then Print "有"; b(i); "个"; i
Next i
End Sub
怎么会有10和200呢?
这个程序没问题的,只要不大于32767就行。
输入1个22222,它会告诉你有5个2。