找鞍点:在一个矩阵中,如果i行上的最大值a(i,j)同时是第j列上最小值,则称该数是一个鞍点。
例如:
1 4 9 83 4 6 17 5 8 6在上面的矩阵中,第二行第三列的元素6就是这个矩阵的鞍点。
下面是我写的程序,经过测试,漏洞百出。请大家指点迷津
Private Sub Command1_Click()
Const M As Integer = 3
Const N As Integer = 3
Dim min As Integer
Dim max As Integer
Dim p As Integer
Dim q As Integer
Dim data(M, N) As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Randomize Timer
For i = 1 To M
For j = 1 To N
data(i, j) = Rnd * 50
Next
Next
For i = 1 To M
For j = 1 To N
Print data(i, j);
Next
Print
Next
For i = 1 To M
For j = 1 To N
If data(i, j) > max Then
p = i: q = j
max = data(i, j)
End If
Next
min = max
For k = 1 To M
If min >= data(k, q) Then
min = data(k, q)
Exit For
End If
Next
If max = min Then
Print "找到鞍点:"; max
Print "其行值为:"; p, "其列值为:"; q
Exit Sub
End If
Next
Print "没找到鞍点"End Sub
例如:
1 4 9 83 4 6 17 5 8 6在上面的矩阵中,第二行第三列的元素6就是这个矩阵的鞍点。
下面是我写的程序,经过测试,漏洞百出。请大家指点迷津
Private Sub Command1_Click()
Const M As Integer = 3
Const N As Integer = 3
Dim min As Integer
Dim max As Integer
Dim p As Integer
Dim q As Integer
Dim data(M, N) As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Randomize Timer
For i = 1 To M
For j = 1 To N
data(i, j) = Rnd * 50
Next
Next
For i = 1 To M
For j = 1 To N
Print data(i, j);
Next
Next
For i = 1 To M
For j = 1 To N
If data(i, j) > max Then
p = i: q = j
max = data(i, j)
End If
Next
min = max
For k = 1 To M
If min >= data(k, q) Then
min = data(k, q)
Exit For
End If
Next
If max = min Then
Print "找到鞍点:"; max
Print "其行值为:"; p, "其列值为:"; q
Exit Sub
End If
Next
Print "没找到鞍点"End Sub
解决方案 »
- VB 调用Excel对象的问题
- 请问高手如何在VB实现单击listview后,把其中的值写到TEXT控件去?
- 有关vb工具栏的位置移动问题
- 在线求助,msflexgrid控件为什么只能包含2048条记录?
- 大家看数据能传得过去吗?我怎么设winsock?
- 如何动态创建一个控件?
- VB与ODBC的问题!
- 招聘程序员、高级软件工程师、软件项目经理
- 我用VB6.0写了一个记事本程序,但是它只能打开第一个回车键符号以前的内容,请问如何打开文本文件的全部内容
- Frank_Xu()快来
- 向达人请教,我想调用指纹识别器来写个小程序,实现自己的一些功能。
- webbrower.documet.getElementById().insertRow() 进去的<tr>怎样添加事件???
Const N As Integer = 3
Dim iData(1 To M, 1 To N) As Integer
Dim min As Integer
Dim max As Integer
Dim q As Integer
Dim b As Boolean
Dim i As Integer, j As Integer, k As Integer
'生成数组
Randomize Timer
For i = 1 To M
For j = 1 To N
iData(i, j) = Rnd * 50
Debug.Print iData(i, j);
Next
Debug.Print
Next
b = False
For i = 1 To M
'找行最大值
max = 0
min = 0
q = 0
For j = 1 To N
If iData(i, j) > max Then
max = iData(i, j)
q = j '记录列值
min = max
End If
Next j
'找与q相对列的最小值
For k = 1 To M
If iData(k, q) < min Then min = iData(k, q)
Next
'判断max与min是否相等
If max = min Then
b = True
Debug.Print "找到鞍点:"; max
End If
Next i
If b = False Then Debug.Print "没有找到鞍点"
------一切以实际行动支持CSDN社区----------