数学很久以前,我不确定我想要什么,也不知道如何计算它。想象一下,我知道我有1到100的数字。我想给用户一个选择器/组合框,以便能够选择其中一些数字。但我不想要选择器中的所有数字。也许它显示数字1,2,3,4,5,10,15,25,40,60,80,90,100。用我的话说,它在开始时缓慢上升,然后变得更陡峭。我认为指数函数太陡了。
最终我会喜欢它,如果有人可以告诉我如何创建一个客观的C方法,它接受两个数字和返回以及类似于我上面所示的NSNumbers数组。
先谢谢大家。
答案 0 :(得分:1)
Sequence of Triangular Number怎么样?
公式: 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等......
我将离开实施部分供您试用。
答案 1 :(得分: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
)
答案 2 :(得分: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设置为“圆”数。但是如果我们想要开始计数,我们可以定义类似的东西:
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,......
*当然,要在给定的最大值之前停止,只需在返回大于所需最大值的数字时停止评估该函数。