目的:主要通过积分来计算级别比如:1级:0~500......(1)*5002级:500~1500......(1+2)*5003级:1500~3000......(1+2+3)*5004级:3000~5000......(1+2+3+4)*500假如当前用户积分是1025628分,利用这个规律,如何用最简便的公式算出当前级别

解决方案 »

  1.   

    static int Level(int number)
    {
        if (number < 0) return 0;
        var i = 1;
        var j = 1;
        while(true)
        {
            if (number <= j * 500) return i;
            i++;
            j += i;
        }
    }
    static void Main(string[] args)
    {
        Console.WriteLine(Level(500));
        Console.WriteLine(Level(1500));
        Console.WriteLine(Level(3000));
        Console.WriteLine(Level(5000));
        Console.WriteLine(Level(1025628)); // 64
        Console.ReadKey();
    }
    蹭分
      

  2.   

    这不是很简单吗?后面就是一个简单的递增数列求和。
    你把积分除以500,然后再用递增数列求和的反函数(原函数是Y=X*(X+1)/2),就能得到个约数,然后取整就OK了。
      

  3.   

    private int GetGread(int source)
    {
    int t=1;
    int s1,s2;
    s1 = 0;
    s2 = 0;
    for(int i=1;i<10;i++)
    {
    s2 = ((i+1)*i/2)*500;
    if(source>s1 && source<=s2)
    {
    t = i;
    break;
    }
    s1 = s2;
    }
    return t;
    }
      

  4.   

    max = 100;
    level = 0;
    s = 1025628;
    for (int i = 1 ; i< max; i++)
    {
      if (i * 500 >= s)
      {
        level = i
      }
      else
      {
        s = s  - i* 500
      }
    }
    没测试过,不知道是不是你想要的。
      

  5.   

    根据二项式定理。最终得到的等级公式。private int levelnum (int score)
            {
                if (score <= 0) return 0;            Double Y;            Y = (Math.Sqrt(625 + 10 * score) - 25) / 50;            return Convert.ToInt32(Y);
            }