动态创建数学表达式

时间:2012-12-09 06:22:07

标签: php math dynamic

我有一个网站需要根据3个参数生成随机数学问题:运算符(加法,减法,乘法,除法),重组(携带或不携带)和列(一个或两个)。我一直试图围绕如何去做这件事,但我想出的一切都有某种方面的缺陷。

以下是我目前正在使用的内容:

function create_problem($operator, $regrouping, $columns){
    $top = rand(1,9);
    $bottom = rand(1,9);

    if($operator == "+"){
        if($columns == 1 && $regrouping === false){
            $result = array(
                'top' => $top,
                'bottom' => $bottom,
                'formula' => "$top.$operator.$bottom"
            );
        }
        if($columns == 2){
            if($regrouping === false){
                if($top+$bottom > 9){
                    $diff = ($top+$bottom)-10;
                    $top = $diff+rand(1, 3);    
                }
                $result = array(
                    'top' => $top,
                    'bottom' => $bottom,
                    'formula' => "$top.$operator.$bottom"
                );
            }else{
                if($top+$bottom < 10){
                    $top = rand(1, $bottom+1);
                }
            }
        }
    }
    return $result;
}

如果有人处理过此事,或者有人有任何指示,我会非常感激!

1 个答案:

答案 0 :(得分:2)

该函数首先检查重组,并产生随机数,使得公共列数之和小于10(对于无进位)或大于或等于10(对于进位)。

function create_problem($operator, $regrouping, $columns){
$x1 = '';
$x2 = '';
$y1 = '';
$y2 = '';
if ($regrouping){
    if ($columns == 2){
    $x1 = rand(1,9);
    $x2 = rand(0,9);
    $y1 = rand(9-$x1,9);
    $y2 = rand(10-$x2,9);
    } else {
    $x1 = rand(1,9);
    $y1 = rand(9-$x1,9);
    }
} else {
    if ($columns == 2){
    $x1 = rand(1,8);
    $x2 = rand(0,8);
    $y1 = rand(1,9-$x1);
    $y2 = rand(0,9-$x2);
    } else {
    $x1 = rand(1,8);
    $y1 = rand(1,9-$x1);
    }
}

return $x1.$x2.$operator.$y1.$y2;
}

离..

31 54

..其中 3 = $ X1 1 = $ X2 5 = $ Y1 4 = $ Y2