2013-03-25 107 views
1

数学很久以前,我不确定我想要什么,也不知道如何计算它。想象一下,我知道我有从1到100的数字。我想给用户一个选择器/组合框,以便能够选择其中一些数字。但我不希望选取器中的所有数字。也许它显示的数字1,2,3,4,5,10,15,25,40,60,80,90,100。用我的话说,它在一开始就慢慢地上升,然后变得更加陡峭。我认为指数函数太陡。如何计算给定数字范围内的某些点

最终我会喜欢它,如果有人能告诉我如何创建一个客观的C方法,它接受两个数字,返回和NSNumbers数组类似于我上面显示的。

在此先感谢大家。

+0

尝试线性函数,例如'f(x)= 2x' – SomeWittyUsername 2013-03-26 08:58:21

回答

1

Sequence of Triangular Number怎么样?

方程: X Ñ = 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, 496,528,561,...

输入:1至100

最小值= 1,最大值= 100

1 + = 1

1 + = 2

2 + = 5

5 + = 11

11 + = 21

21 + = 36

36 + = 57

等..直到评价数超过最大值

序列: 1,2,5,11,21,36,57等等...

输入:1000至10000

最小值= 1000,最大值= 10000

1000 + = 1000

1000 + = 1001

1001 + = 1004

1004 + = 1010

1010 + = 1020

1020 + = 1035

1035 + = 1056

等..直到评估数ex ceeds最大值

顺序: 1000,1001,1004,1010,1020,1035,1056,等等...

我将离开执行部分,您可以尝试一下。

+1

斐波那契是斐波那契的名字。 http://en.wikipedia.org/wiki/Fibonacci_number – 2013-03-25 19:59:02

+0

嗨,大家好。这真是太棒了,我从来没有听说过那个系列。但它仍然太陡,例如这是第一批0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584 ,4181,6765,10946,17711,28657,46368和75025.我想要一些不太快的东西。 – darbid 2013-03-26 06:03:03

+0

哦!好的。我想我为你找到了合适的人选。我将在几分钟内对我的帖子进行编辑。 – 2013-03-26 08:39:43

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 
) 
0

我不是100%肯定,你在找什么,但你可以用一个简单的公式,例如:

F(X)=地板(X ç)其中c> 1

您可以将c设置为任意数字以提供所需的陡度。例如。对于c = 1.5,您将拥有:

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

要调整为不同的初始值,S,只是做F(X,S)=地板(X ç )+ s。


另一个可能的功能是由一系列缓慢增加陡度的线组成。例如,这里是一个 “抛物线” 由线段的:

F(X,S)= 0.5cd(地板(X/d)) + 0.5cd(地板(X/d) )+ C(地板(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为“圆”数字。但是,如果我们想开始用的人计算,我们可以定义是这样的:

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

所以如果c = 5,d = 5,我们有这样一个顺序:

0,1, 1,2,3,4,5,10,15,20,25,30,40,50, 305,330,355,380,410,440,470,500,...


*当然,给定的最大值,鞠前停止当它返回一个大于期望的最大值的数字时,st停止评估函数。

相关问题