4

好的,我有一个旋转系统,你旋转它会生成一个随机数。

如果数字小于 100,您将获胜。

但是我怎样才能做到这一点,他的数字越低,你得到的硬币就越高

目前我有这个:

    public function getPrize($number)
    {
        $prize = $number * 250 / 2;     

        if ($number < 100)
        {

            return '<span style="color: green;">You have won lucky  <b>'.$prize.'</b> coins!</span>';
        }
        else
        {
            return '<span style="color: red;">Sorry but, bad luck. You have won nothing! number: '.$number.'</span>';
        }
    }

$prize 是奖品。基本上现在我将它乘以 250 并除以 2。所以如果我得到数字“1”。我会得到一个可怕的奖品。

我怎么做?

4

6 回答 6

2

用一点思考和计算解决了它。

1000 - 250 / 100 = 7.5

$prize = 250 + (750 - ($number * 7.5));

结果:

x(1) = 1000

x(100) = 250

于 2013-06-10T22:07:00.240 回答
0

最终版本:

if($number < 100){
    $prize = round((99.00 - floatval($number)) * 7.653) + 250;
else{
    $prize = 0;
}

这给出了 250$number = 99和 1000$number = 1作为作者的愿望。

于 2013-06-10T13:01:33.887 回答
0

这是一种方法。只取与使用最大值的数字相反的值。

function getNumPrizes($number)
{
    $maxPrizes = 100;

    // using max so we dont get less than 0
    $prizesWon = max(($maxPrizes - $number) + 1, 0);

    return $prizesWon;
}

这样你最终会得到 100 个硬币 1,99 个 2,等等。

然后,您可以通过另一个函数运行 $prizesWon 以按照您的意愿对其进行缩放。

于 2013-06-10T13:03:15.403 回答
0

这是另一个解决方案。

   function getNumPrizes($number)
 {
    $maxPrizes = 100;
    $multiplier = // number you want to multiply with the result. It may be 125 or something else

    // using max so we dont get less than 0
    $prizesWon = max(($maxPrizes - $number) + 1, 0)*$multiplier;

    return $prizesWon;
}
于 2013-06-10T13:12:30.243 回答
0

也许你会尝试这种方式:

public function getPrize($number)
{
    $quad = $number*$number;

    if ($number<100 && $number>0)
    {
        $prize = 0.0525665*$quad-12.885*$number + 1012.83; //http://www.wolframalpha.com/input/?i=quadratic+fit+%281%2C1000%29%2C%2850%2C500%29%2C%28100%2C250%29
        return '<span style="color: green;">You have won lucky  <b>'.$prize.'</b> coins!</span>';
    }
    else
    {
        return '<span style="color: red;">Sorry but, bad luck. You have won nothing! number: '.$number.'</span>';
    }
}

编辑。

我找到了一个函数,它给出了给定数字的预期结果。希望没事。数据来源:Wolphram Alpha

于 2013-06-10T13:50:05.780 回答
0

您正在尝试定义一个数学函数 f(x),其中 f(1) = 250 和 f(99) = 1000;

有很多可能的形状。

我建议您绘制函数的结果,以帮助您确定最适合您的方法。

这里有些例子。

// linear growth
// this produces a straight line
function prize($number) return (101 - number) * 75 + 250;  


// log growth
// this produces a log curve where you have diminishing returns
function prize($number) return (log(101 - number) -1 ) * 750 + 250;

// exp growth
// this returns exponential returns
function prize($number) return (((101-number)^2)/10000) * 750 +250;

这里的基本操作是你有一个函数可以为 1-100 之间的系列生成一个值。

  1. 反转输入(101 个数字),以便较小的输入产生较大的结果。
  2. 将输出映射到您的比例......通过将 750 乘以一个比率,介于(0 到 750)之间。
  3. 将您的缩放数字转换为 250,这是您的最小值
于 2013-06-10T15:05:23.183 回答