ホームページ >バックエンド開発 >PHPチュートリアル >PHPの多肢選択問題の採点アルゴリズムについてアドバイスをお願いします。

PHPの多肢選択問題の採点アルゴリズムについてアドバイスをお願いします。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:48:162248ブラウズ

PHP の多肢選択問題のスコアリング アルゴリズム、ガイドしてください
各多肢選択問題に 3 点
原則は、選択肢が少ない場合は 2 ポイント、選択肢が多い場合はポイントなし、間違った選択はポイントなしです
If: 正解 123
回答 123 を送信すると 3 ポイントを獲得できます
回答 12、13、23 を送信すると、それぞれ 2 ポイントを獲得します
回答を送信 1234,234,134,124 ポイントなし
それを達成する方法はありますか? それとももっと良い方法がありますか?

PHP アルゴリズム
------解決策----------------------
説明によると、多肢選択式の質問は使用していませんチェックボックスですがテキストを使用しています
また、選択肢は 9 つまでです

したがって、スコアは
と書くことができます。 count(array_intersect(str_split($正解), str_split($提出回答));

つまり、それぞれを配列に切り分けて、交差
------解法-----
チェックボックスを使用している場合
送信後に得られるのは配列であり、それを正解の配列
と交差させるだけです------解決策------ --
$正解 = array(1, 2, 3);
$回答を送信 = array(1, 2);
$score = count(array_intersect($正解, $提出回答));
echo $score; //2
-----解決策---------
引用:
$正解 = array(1, 2, 3);
$回答を送信 = array(1, 2);
$score = count(array_intersect($正解, $提出回答));
エコー $スコア; //2

交差を見つけることは、投稿者の質問の要件を満たしていません。たとえば、送信された回答が配列 (1, 2, 4) である場合、交差も (1, 2) となり、実際には 0 ポイントを取得する必要があります。
------解決策----------------------
はい、完全に一貫性はありません。
しかし、1、2、4を選択した場合にポイントが得られないのは理不尽です。 4 が対抗オプションでない限り、たとえば: なし
もしそうなら、質問者は回答者を意図的に誤解させていることになります

質問をこのように書かなければならない場合は、次のように書くことができます
$正确答案 = array(1, 2, 3);<br />
$错误答案 = array(4);<br />
$提交答案 = array(1, 2, 4);<br />
$得分 = array_intersect($错误答案, $提交答案) ? 0 : count(array_intersect($正确答案, $提交答案));<br />
echo $得分; //0



引用:
引用:$正解 = array(1, 2, 3);
$回答を送信 = array(1, 2);
$score = count(array_intersect($正解, $提出回答));
エコー $スコア; //2
交差を見つけることは、投稿者の質問の要件を満たしていません。たとえば、送信された回答が配列 (1, 2, 4) である場合、交差も (1, 2) となり、実際には 0 ポイントを取得する必要があります。
……

-----解決策---------------------------- ---
マージ 違いだけで十分です
解答用紙は表、答えは裏にあります
相違がある場合、ポイントは付与されません
交点なし、配点なし(前文を除いた上で白紙解答用紙の状況を考慮しています。白解答用紙がないことが確認できればこの文は省略可能です)
差分設定なし、交点あり、交点の数=解答用紙、ハーフ点
差分セットはなく、交差があり、交差の数 = 解答用紙、満点 (これについてロジックを記述する必要はありません。else を使用するだけで済みます。なぜなら、上記の状況を除外した後、残りの交差は等しいからです) )

注意
1. 上記は一部の判定条件が省略されているため、スイッチ許容ロジックではなくelse if非互換ロジックを順次判定する必要があります
2. 解答用紙と解答には重複した値がないことを確認する必要があります。そうしないと、交差の数を判断する際に問題が発生します
-----解決策---------- ------- ---
はビット演算を使用して計算できます
A:1 B:2 C:4 D:8
ABの選び方は3つ
ABCDの選び方は15

たとえば、正解が 4 の場合、選択の結果を見てください: N 対 4
if(N==4) 3 ポイント
4&N==N の場合 2 ポイント
その他○点




-----解決策---------
引用:
はビット演算を使用して計算できます
A:1 B:2 C:4 D:8
ABの選び方は3
ABCDの選び方は15

たとえば、正解が 4 の場合、選択の結果を見てください: N 対 4
if(N==4) 3 ポイント
4&N==N の場合 2 ポイント
その他○点


ビット演算は、32 未満のリムを選択するのが良い選択です (システムと PHP のバージョンにより最大 63 になる可能性があります)。これは非常に便利です
でも大きいと不便です
-----解決策---------------------------- --
ボスに従う アイデアは次のとおりです
<br>
$correct = array(1, 2, 3);<br>
$submit = array(1, 2);<br>
$score = count(array_intersect($correct, $submit));<br>
if($score < count($submit)){//複数回選択した場合は 0 ポイントを与えます<br>
$スコア = 0;<br>
}<br>
エコー $スコア; //2 <div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。