前面3级情况特殊:
积分:0 = 等级:1
积分:1 = 等级:2
积分:2 = 等级:3
后面情况一样,每4级为一个阶段。
积分:3或4或5 = 等级:4
积分:6或7或8 = 等级:5
积分:9或10或11 = 等级:6
积分:12或13或14 = 等级:7
---------------------------------------------
积分:15或16或17或18或19 = 等级:8
积分:20或21或22或23或24 = 等级:9
积分:25或26或27或28或29 = 等级:10
积分:30或31或32或33或34 = 等级:11
---------------------------------------------
积分:35或36或37或38或39或40或41 = 等级:12
积分:42或43或44或45或46或47或48 = 等级:13
积分:49或50或51或52或53或54或55 = 等级:14
积分:56或57或58或59或60或61或62 = 等级:15
---------------------------------------------
积分:63或64或65或66或67或68或69或70或71 = 等级:16
积分:72或73或74或75或76或77或78或79或80 = 等级:17
积分:81或82或83或84或85或86或87或88或89 = 等级:18
积分:90或91或92或93或94或95或96或97或98 = 等级:19
---------------------------------------------
上面是以为论坛上的朋友提出的问题。
通过观察我们可以发现每4行一组,每组数字每行的个数比上一组每行多2个。
设当前组为N:每行有2*n+1个数字,由于每组4行得知每组最大数字为:(2*n+1)*4+上一组的值
从3--14为第一组,最大值为(2*n+1)* 4 + 2
根据分数求等级:level=score/每行个数+每行个数(不计小数)
由此可以写出如下代码:
private static int checkLevel(int score)
{
int level = 0;
if (score < 4)
{
level = score + 1;
}
else if (score == 4)
{
level = 4;
}
else
{
int rus = 2;
for (int n = 1; n < int.MaxValue; n++)
{
//(2*n+1)*4+2
rus = 8 * n + 4 + rus;
if (rus >= score)
{
rus = n;
break;
}
}
level = score / (2 * rus + 1) + (2 * rus + 1);
}
return level;
}不知道各位是否有更好的算法,欢迎交流。
956



被折叠的 条评论
为什么被折叠?



