VB:这个程序为什么得不到m*n数组的“鞍点”(在本行中最大,在本列中最小的数组元素)?

Private Sub Form_Click()
Dim M As Integer, N As Integer, A() As Integer, B() As Integer, C() As Integer, Max As Integer, Min As Integer, I As Integer, J As Integer, K As Integer
M = InputBox("请输入行数", "输入M值", 5): N = InputBox("请输入列数", "输入N值", 5)
ReDim A(M, N): ReDim B(M, N): ReDim C(M, N)
Form1.Cls
Randomize
For I = 1 To M
For J = 1 To N
A(I, J) = Int(90 * Rnd) + 10
Print A(I, J);
Next J
Print
Next I

K = 1
For I = 1 To M
Max = A(I, 1)
For J = 1 To N
If A(I, J) > Max Then
Max = A(I, J)
K = J
End If
Next J
B(I, K) = 1
Next I

K = 1
For J = 1 To N
Min = A(1, J)
For I = 1 To M
If A(I, J) < Min Then
Min = A(I, J)
K = I
End If
Next I
C(K, J) = 1
Next J

For I = 1 To M
For J = 1 To N
If B(I, J) = C(I, J) And B(I, J) = 1 Then
Print "A("; I; ","; J; ")="; A(I, J);
End If
Next J
Next I
End Sub

第1个回答  2008-05-06
K=1的位置放的不对:
Private Sub Form_Click()
Dim M As Integer, N As Integer, A() As Integer, B() As Integer, C() As Integer, Max As Integer, Min As Integer, I As Integer, J As Integer, K As Integer
' M = InputBox("请输入行数", "输入M值", 5): N = InputBox("请输入列数", "输入N值", 5)
M = 5
N = 5
ReDim A(M, N): ReDim B(M, N): ReDim C(M, N)
Form1.Cls
Randomize
For I = 1 To M
For J = 1 To N
A(I, J) = Int(90 * Rnd) + 10
Print A(I, J);
Next J
Print
Next I

For I = 1 To M
Max = A(I, 1)
K = 1
For J = 1 To N
If A(I, J) > Max Then
Max = A(I, J)
K = J
End If
Next J
B(I, K) = 1
Next I

For J = 1 To N
Min = A(1, J)
K = 1
For I = 1 To M
If A(I, J) < Min Then
Min = A(I, J)
K = I
End If
Next I
C(K, J) = 1
Next J

For I = 1 To M
For J = 1 To N
If B(I, J) = C(I, J) And B(I, J) = 1 Then
Print "A("; I; ","; J; ")="; A(I, J);
End If
Next J
Next I
End Sub本回答被提问者采纳
第2个回答  2008-05-06
Private Sub Form_Click()
Dim M As Integer, n As Integer, A() As Integer, B() As Integer, C() As Integer, Max As Integer, Min As Integer, I As Integer, J As Integer, K As Integer
Dim num As Integer '用来记录有几个符合条件的数
M = InputBox("请输入行数", "输入M值", 5): n = InputBox("请输入列数", "输入N值", 5)
ReDim A(M, n): ReDim B(M, n): ReDim C(M, n)
Form1.Cls
Randomize
For I = 1 To M
For J = 1 To n
A(I, J) = Int(90 * Rnd) + 10
Print A(I, J);
Next J
Print
Next I

K = 1
For I = 1 To M
Max = 0
For J = 1 To n
If A(I, J) > Max Then
Max = A(I, J)
K = J
End If
Next J
B(I, K) = Max

Next I

K = 1
For J = 1 To n
Min = A(1, J)
For I = 1 To M
If A(I, J) < Min Then
Min = A(I, J)
K = I
End If
Next I
C(K, J) = Min
Next J

For I = 1 To M
For J = 1 To n
If B(I, J) = C(I, J) And B(I, J) <> 0 Then
Print "A("; I; ","; J; ")="; B(I, J);
num = num + 1
End If
Next J
Next I
'没有符合条件的数就打印提示
If num = 0 Then
Print "没有同时满足行最大,列最小的数"
End If
End Sub
'顺便说一下,你这种使用90*rnd获取数的方法,大多数情况下都得不到符合条件的数,建议换成I*J,这样就好一些。
相似回答