php 多选题评分算法 求指点

php中文网
发布: 2016-06-13 12:48:16
原创
2428人浏览过

php 多选题评分算法 求指导
多选题一题3分
原则是:少选给2分,多选不给分,选错不给分
假如:正确答案123
提交答案 123 得3分 
提交答案 12,13,23,都可得2分 
提交答案 1234,234,134,124124 没分
怎么实现,还是有更好的方法  

PHP 算法
------解决方案--------------------
按你的描述,你的多选题不是用 checkbox 而是用 text 输入的
并且备选答案不会多于9个

于是得分可写作
count(array_intersect(str_split($正确答案), str_split($提交答案));

就是:分别切割成数组,然后取交集
------解决方案--------------------
如果你是使用 checkbox
那么提交后得到的就是数组,与正确答案数组取交集就是了
------解决方案--------------------
$正确答案 = array(1, 2, 3); $提交答案 = array(1, 2); $得分 = count(array_intersect($正确答案, $提交答案)); echo $得分; //2
------解决方案--------------------
引用:
$正确答案 = array(1, 2, 3); $提交答案 = array(1, 2); $得分 = count(array_intersect($正确答案, $提交答案)); echo $得分; //2

取交集和楼主的题目要求不符合吧,比如提交答案为数组array(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); $得分 = count(array_intersect($正确答案, $提交答案)); echo $得分; //2
取交集和楼主的题目要求不符合吧,比如提交答案为数组array(1,2,4),那么交集也是(1,2),实际应该得0分吧。
……

------解决方案--------------------
交并差就可以了
答卷在前,答案在后
有差集,不给分
无交集,不给分(排除上一个后这个是考虑空白答卷的情况,如果确认不会有白卷这句可以不用)
无差集,有交集,交集数量!=答卷,半分
无差集,有交集,交集数量=答卷,满分(这个可以不写逻辑,直接用else也行,因为排除上面几种情况剩下就是交集相等)

注意
1.上面要顺序判断,是 else if 不相容逻辑而不是 switch 可容逻辑,因为省了一些判断条件
2.答卷和答案都要确保无重复值,不然交集数量判断会有问题
------解决方案--------------------
可以用位运算来计算
A:1 B:2 C:4 D:8
如何选择AB 则为3
如何选择ABCD 则为15

比如正确为4 则 看看选择的结果为N跟4比
if(N==4) 3分
if 4&N==N 2分
其他 O分




------解决方案--------------------
引用:
可以用位运算来计算
A:1 B:2 C:4 D:8
如何选择AB 则为3
如何选择ABCD 则为15

比如正确为4 则 看看选择的结果为N跟4比
if(N==4) 3分
if 4&N==N 2分
其他 O分


位运算是不错的选择,选择肢 但更大就不太方便了
------解决方案--------------------
按照老大的思路,可以这样做
<br>
$correct = array(1, 2, 3);<br>
$submit = array(1, 2);<br>
$score = count(array_intersect($correct, $submit));<br>
if($score 
  $score = 0;<br>
}<br>
echo $score; //2 <div class="clear"></div>
登录后复制
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号