我有一个网站需要根据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;
}
如果有人处理过此事,或者有人有任何指示,我会非常感激!
答案 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