dearmb 发表于 2014-3-7 15:02:01

一组数字,找出最接近指定数字的数字,负数不要……(已解决)

本帖最后由 dearmb 于 2014-4-6 15:52 编辑


首先先指定一个两个小点,获取两点的X,Y坐标
然后获取所有横杠的坐标,放到一个数组里,横杠的Y坐标和两点的Y坐标最近的,就是正好那个范围
所以才有这个帖子的题目,这就是我的目的

netegg 发表于 2014-3-7 15:45:11

建立个数组,把所有的数字和指定数字都包含在内,排序,找出指定数字的索引,下一项就是要找的数字

dearmb 发表于 2014-3-7 15:53:29

回复 2# netegg

我是想把数字添加到数组里,但是现在的情况是,数组大小和数组内容都是变量
是在数组之前获取到的,好像不支持内容是变量的数组呢

netegg 发表于 2014-3-7 16:01:34

何必管数组大小呢,redim就完了

netegg 发表于 2014-3-7 16:02:39

如果是已经获取到的数据,做个不定数组就行了

dearmb 发表于 2014-3-7 16:23:35

回复 5# netegg


    什么叫做“不定数组”?
我在学习redim呢

netegg 发表于 2014-3-7 16:28:05

dim $a=$i
....
redim $a = $i +1
大概意思

skyfree 发表于 2014-3-7 17:29:28

本帖最后由 skyfree 于 2014-3-8 08:49 编辑

#include <Array.au3>

Opt('MustDeclareVars', 1)

_Demo__Main()
Exit

Func _Demo__Main()
        ;输入
        Local $r1, $r2
        ; <---- 注意,因为只是测试和范例,我并没有增加审查机制,所以输入值务必是正确的 ----->
        $r1 = InputBox('请输入', '请输入指定数, 如55', '55')
        $r2 = InputBox('请输入', '请输入一组数, 多个使用英文逗号隔开, 如23,34,88,95', '34,88,23,95')

        ;处理
        Local $Num = Number($r1)
        Local $ta_Arr = StringSplit($r2, ',')
        Local $a_Num, $p = 1
        Local $i
        For $i = 1 To UBound($ta_Arr, 1) - 1
                If Number($ta_Arr[$i]) - $Num > 0 Then
                        ReDim $a_Num[$p + 1]
                        $a_Num[$p] = Number($ta_Arr[$i])
                        $a_Num[$p] = Number($ta_Arr[$i]) - $Num
                        $p += 1
                EndIf
        Next
        _ArraySort($a_Num, 0, 1, 0, 1)
        ;;_ArrayDisplay($a_Num,'$a_Num')

        ;输出
        MsgBox(0 + 64, '', '最接近' & $Num & '的数是' & $a_Num)
EndFunc   ;==>_Demo__Main

netegg 发表于 2014-3-7 21:23:50

本帖最后由 netegg 于 2014-3-7 21:28 编辑

回复 8# skyfree
不觉得搞出个二维数组有点画蛇添足吗
其实我不清楚楼主的具体要求和具体情况为何

skyfree 发表于 2014-3-8 08:49:33

回复 9# netegg


    拿出解决方案来,再评论。

netegg 发表于 2014-3-8 16:16:48

#include<array.au3>
$aa = _arraysort($aA)
_ArraySearch($aa, $item)

haijie1223 发表于 2014-3-9 10:39:50

{:face (460):} 实在想不出好的办法来,笨人笨法~
#include <Array.au3>
Dim $num =
Dim $x = 0, $compN = 55
Dim $k
For $i = 1 To $num
        If $num[$i] > $compN Then
                For $element In $num
                        If $num[$i] < $element Then
                                If $x = 0 Then
                                        $x = $num[$i]
                                        $k = $i
                                ElseIf $num[$i] < $x Then
                                        $x = $num[$i]
                                        $k = $i
                                EndIf
                        EndIf
                Next
        EndIf
Next
MsgBox(0, "该数组中最接近" & $compN & "的值", "$num[" & $k & "] = " & $x)

palkiller 发表于 2014-3-10 12:59:42

Dim $array=
Dim $num=55
Dim $j=-1,$k=0
For $i=0 To UBound($array)-1
        If $array[$i]>=$num Then
                If $j=-1 Then
                        $j=$array[$i]-$num
                        $k=$array[$i]
                ElseIf $array[$i]-$num<$j Then
                        $j=$array[$i]-$num
                        $k=$array[$i]
                EndIf
        EndIf
Next
MsgBox(1,"","最接近"&$num&"的数是"&$k)

dearmb 发表于 2014-3-10 14:35:28

回复 12# netegg

呃……_arraysort也不是按数字大小排序啊,是按首字母排序啊,好像文件名排序一样……唉

                _ArrayDisplay($arrhenggang, "原数组")
                _Arraysort($arrhenggang)
                _ArrayDisplay($arrhenggang, "原数组")

dearmb 发表于 2014-3-10 14:48:53

实际需求上图了,请帮忙看下,多谢了
页: [1] 2
查看完整版本: 一组数字,找出最接近指定数字的数字,负数不要……(已解决)