PHP
アルゴリズム
------解決策----------------------説明によると、多肢選択式の質問は使用していませんチェックボックスですがテキストを使用しています
また、選択肢は 9 つまでです
したがって、スコアは
と書くことができます。
count(array_intersect(str_split($正解), str_split($提出回答));
つまり、それぞれを配列に切り分けて、交差
------解法----- チェックボックスを使用している場合
送信後に得られるのは配列であり、それを正解の配列
と交差させるだけです------解決策------ -- $正解 = array(1, 2, 3);
$回答を送信 = array(1, 2);
$score = count(array_intersect($正解, $提出回答));
echo $score; //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
-----解決策---------------------------- ---マージ 違いだけで十分です
解答用紙は表、答えは裏にあります
相違がある場合、ポイントは付与されません
交点なし、配点なし(前文を除いた上で白紙解答用紙の状況を考慮しています。白解答用紙がないことが確認できればこの文は省略可能です)
差分設定なし、交点あり、交点の数=解答用紙、ハーフ点
差分セットはなく、交差があり、交差の数 = 解答用紙、満点 (これについてロジックを記述する必要はありません。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 ポイント
その他○点
-----解決策---------
ビット演算は、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>