2

客観的なc数学関数の質問.

セット内の他の値と比較したい ax 値を取得し、x 値が最も近いセットの値を特定します。

たとえば、int が 5、10、15、20、25 だとします。

これらの数のどれが 7 に最も近いかを判断する最善の方法は何ですか?

4

3 に答える 3

4
    int closestDistance = INT32_MAX;
    int indexOfClosestDistance = -1;
    int x = 7;

    for (int i=0; i < [yourArray count]; i++)
    {
        int num = yourArray[i];
        int diff = abs(num - x);

        if (diff < closestDistance)
        {
            closestDistance = diff;
            indexOfClosestDistance = i ;
        }
    }

幸運を祈ります

于 2012-10-05T21:44:29.420 に答える
1

Objective-C も Cocoa も、これを解決するものを提供していません。int を のプレーンな古い配列に格納するintか、それぞれを でラップしNSNumberてラッパーを に格納することができますNSArray

配列を何度もプローブする場合は、事前に 1 回並べ替えてから、プローブごとにバイナリ検索 (標準 C 関数bsearchまたは Core FoundationCFArrayBSearchValuesまたは Cocoa の関数-[NSArray indexOfObject:inSortedRange:options:usingComparator:]) を使用して、最も近い 2 つの要素を見つけます。配列を 1 回か 2 回だけプローブする場合は、for ループ、減算、absおよび を使用しMINます。

于 2012-10-05T21:41:07.420 に答える
0

最も簡単な方法は、大きい数値から小さい数値を引くことです。したがって、最初に 2 つの数値を比較してから、単純な減算を行います。したがって、10-7 は 3 離れており、7-5 はわずか 2 離れていることがわかります。

于 2012-10-05T22:15:11.147 に答える