1

数学はずっと前のことで、何が欲しいのか、どうやって計算するのかわかりません。1から100までの数字があることを知っていると想像してください。これらの数字のいくつかを選択できるように、ユーザーにピッカー/組み合わせボックスを提供したいと思います。しかし、私はピッカーにすべての数字が必要なわけではありません。多分それは数字1、2、3、4、5、10、15、25、40、60、80、90、100を示しています。私の言葉では、最初はゆっくりと上昇し、その後急になります。指数関数は急すぎると思います。

最終的には、上記で示したものと同様に、2つの数値を受け入れ、NSNumberの配列を返すObjectiveCメソッドを作成する方法を誰かに教えてもらえれば幸いです。

みなさん、よろしくお願いします。

4

3 に答える 3

1

三角数のシーケンスはどうですか?

式: x n = n(n + 1)/ 2

シーケンス(n = 0から開始):0、1、3、6、10、15、21、28、36、45、55、66、78、91、105、120、136、153、171、190、210 、231、253、276、300、325、351、378、406、435、465、496、528、561、..。

入力:1〜100

最小値=1、最大値= 100

1 + 0 = 1

1 + 1 = 2

2 + 3 = 5

5 + 6 = 11

11 + 10 = 21

21 + 15 = 36

36 + 21 = 57

など..評価された数が最大値を超えるまで

シーケンス:1、2、5、11、21、36、57など..。

入力:1000〜10000

最小値=1000、最大値= 10000

1000 + 0 = 1000

1000 + 1 = 1001

1001 + 3 = 1004

1004 + 6 = 1010

1010 + 10 = 1020

1020 + 15 = 1035

1035 + 21 = 1056

など..評価された数が最大値を超えるまで

シーケンス: 1000、1001、1004、1010、1020、1035、1056など..。

実装部分はお任せします。

于 2013-03-25T19:32:26.540 に答える
0

生成するコードをいくつか作成しました

-(NSArray *)generateNumbersFromBeginning:(int)begin toEnd:(int)end withCount:(int)count
{
    NSMutableArray * genNumbers=[NSMutableArray new];

    double sqBegin=1.0; //our beginning generator

    double sqEnd  =sqrt((double)(end-begin)); // last element to produce

    double step = (sqEnd-sqBegin)/((double)count);//

    double power=1.0;

    NSLog(@"%f %f %f",sqBegin,sqEnd,step);

    for (int a= 0; a<count; a++) {

        sqBegin+=step;

        power += 1.0/(double)count;

        int genNumber=(int)(pow(sqBegin, power));

        genNumber+=begin;

        [genNumbers addObject:[NSNumber numberWithInt:genNumber]];

    }

    NSLog(@"numbers are: %@ ",genNumbers);

    return genNumbers;


}

使用法は([a、b]、x)です。ここで、aは始点、bは終点、xはその範囲で生成されたintの数です。

例えば:

[self generateNumbersFromBeginning:9000 toEnd:10000 withCount:36];

この呼び出しの結果は次のとおりです。

numbers are: (
    9001,
    9002,
    9003,
    9005,
    9006,
    9008,
    9010,
    9012,
    9014,
    9017,
    9021,
    9025,
    9029,
    9034,
    9041,
    9048,
    9056,
    9065,
    9076,
    9089,
    9104,
    9121,
    9141,
    9165,
    9192,
    9223,
    9259,
    9301,
    9350,
    9407,
    9473,
    9549,
    9638,
    9741,
    9860,
    9999
) 
于 2013-03-26T14:49:43.880 に答える
0

何を探しているのか100%わかりませんが、次のような簡単な式を使用できます。

f(x)= floor(x c)ここで、c> 1

cは、必要な急勾配を与える任意の数に設定できます。例えば。c = 1.5の場合、次のようになります。

0、1、2、5、8、11、14、18、22、27、31、36、41、46、52、58、64、70、76、82、89、96、103、110、117、 125..。

別の開始値sに調整するには、f(x、s)= floor(x c)+sを実行します。


別の可能な機能は、急勾配でゆっくりと増加する一連の線で構成される機能です。たとえば、線分で構成された「放物線」は次のとおりです。

f(x、s)= 0.5cd(floor(x / d))2 + 0.5cd(floor(x / d))+ c(floor(x / d)+ 1)(x mod d)+ s

ここで、cとdは選択した定数(≥1)です(そして、導出は少しイライラします)。cは最初の線の傾き、dは線分の長さを表します。sも開始値です。たとえば、s = 100、c = 3、d = 4とすると、次のシーケンスがあります(x = 0、1、2、...の場合)。

100、103、106、109、112、118、124、130、136、145、154、163、172、184、196、208、220、232、247 ..

ここで、「丸め」の数値が必要な場合は、cとsを「丸め」の数値に設定します。しかし、1で数え始めたい場合は、次のように定義できます。

g(x) = x             when x = 0, 1, 2, 3, 4
     = f(x - 5, 5)   when x ≥ 5

したがって、c = 5、d = 5の場合、次のようなシーケンスがあります。

0、1、2、3、4、5、10、15、20、25、30、40、50、60、70、80、95、110、125、140、155、175、195、215、235、 255、280、305、330、355、380、410、440、470、500、..。


*もちろん、指定された最大値の前で停止するには、関数が目的の最大値よりも大きい数値を返したときに関数の評価を停止します。

于 2013-03-26T18:18:25.063 に答える