不想了,算的我头都晕了.
毕业设计中的一个问题,大意如下:
每道试题有难度值(0-4)和分值(假设为整数)。
在N道题中选A道难度为0的题,B道难度为1的题,C道难度为2的题,D道难度为3的题,E道难度为4的题,要求尽可能抽出来的这些题总分为TotalScore分。优先保证难度,再考虑总分。如果无法调整总分,可以给出提示信息。
其中A,B,C,D,E,TotalScore都是输入的参数,不能确定,连N也是未知。
天哪,如何写算法?
问题点数:100、回复次数:17Top
1 楼980()回复于 2003-06-02 15:11:01 得分 10
sql语句+变量
select sum(nd) as ndsum from table1 where nd='"&nd&"'Top
2 楼muxinpp(木心 Pontus)回复于 2003-06-02 15:14:39 得分 10
由abcde就可以确定totalscore,也就是说只要输入了abcde,输入totalscore就没用了Top
3 楼funboy88(司令)回复于 2003-06-02 15:22:55 得分 10
select top a * from tablename where nd=0 order by newid()
union all
select top b * from tablename where nd=1 order by newid()
union all
select top c * from tablename where nd=2 order by newid()
union all
select top d * from tablename where nd=3 order by newid()
union all
select top e * from tablename where nd=4 order by newid()Top
4 楼funboy88(司令)回复于 2003-06-02 15:23:56 得分 0
totalscore
不太好确定Top
5 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-06-02 15:23:59 得分 10
明白着是贪心算法,很简单。这里有我的程序,偶不要分。
http://expert.csdn.net/Expert/topic/1693/1693718.xml?temp=.1787836Top
6 楼yuehuaqishi(月华骑士)回复于 2003-06-02 15:27:22 得分 0
你能详细的说明你的分值是怎么设置的吗?Top
7 楼annyking(anny)回复于 2003-06-02 15:44:05 得分 5
N是个什么呀!
最好把你的毕业设计课题一起发出来好了,这样会看的好一点Top
8 楼enxi(恩熙 @_@)回复于 2003-06-02 16:21:57 得分 0
我是这样做的:
1。每道大题单独抽题,抽题时,先抽出满足题型和知识点的试题,假设抽了N道题。
2。先满足每种难度试题的要求,不足,用相似难度的试题代替。
3。算出已抽试题的总分,与需要的总分比较,如果大于的话,用已选试题中分数最大的试题去与未选试题中分数最小的试题交换,当然,他们的难度是一样的,如此循环,知道满足条件。如果小于,同理替换。
Top
9 楼yuehuaqishi(月华骑士)回复于 2003-06-03 09:32:15 得分 0
拜托
你能否把你的需求详细些描述
否则我们想出来的也和你的要求差太远了Top
10 楼enxi(恩熙 @_@)回复于 2003-06-03 10:47:04 得分 0
To 月华骑士:
其实我已经讲得够清楚了。想在主要的问题是一个调分的算法问题,想请教各位是否有好的算法。这样好了,我把题意简单化:
题库中有N道试题,已经从中抽出A道难度为0的题,B道难度为1的题,C道难度为2的题,D道难度为3的题,E道难度为4的题。假设不考虑缺题的情况,即各种难度的试题都抽到了。现在它们的总分与预计要求的总分不符,可能偏大也肯能偏小,要求你去调分。
调分的原则,你可以通过在已选试题和未选试题中用相同难度但分数不同的试题对调来调分。
现在,请教各位有何好的调分算法???
Top
11 楼yuehuaqishi(月华骑士)回复于 2003-06-03 14:47:26 得分 20
难度为0、1、2、3、4的题的分值是怎么给的,
是不是它们的分值是不定的,
如难度为0中的题,分值是不是可以为1分、也可以为2分,甚至是N,
还是说你的难度为0的分值就是0,难度为1的题的分值就是1呢?
Top
12 楼andy2001p(火星)回复于 2003-06-03 14:52:14 得分 5
关注中,给点分吧!Top
13 楼enxi(恩熙 @_@)回复于 2003-06-03 14:55:29 得分 0
一道题的难度和分值这2个属性是毫不相干的。就好比几个不同高度的人,他们身上带的钱与他们的高度毫不相干。Top
14 楼yuehuaqishi(月华骑士)回复于 2003-06-03 14:58:03 得分 0
但是最后他的总分就和题的分值相关了Top
15 楼oldsky(九指神丐)回复于 2003-06-03 15:17:50 得分 30
我的试探法,敬请参考:
设定一个差额:Difference, 当前实际总分:CurrentTotalScore,实际要的总分:TotalScore
步骤:
1.取得差额: Difference=CurrentTotalSocre-TotalScore
2.比较差额: if Difference>0 then //处理大于的情况
3.在已选试题中寻找最大分,设为Smax
4.差额与最大分比较: if Difference>=Smax
5.在未选试题中寻找难度相同但分数最小的试题Smin
6.如果找到,替换,转向1;
7.如果没找到,寻找下一个Smax,转向5;
8.如果此时Difference<Smax
9.试图寻找难度相当,且分数为Smax-Difference的试题
10.如果找到,替换,结束调分动作
11.如果没找到,寻找下一个Smin,找到,替换,转向9;没找到,继续下一个Smax,转向9
12.整个循环仍未找到,给出提示信息,结束调分动作。
几点说明:下一个Smax/Smin:将已选试题/未选试题按分数排序后形成的序列,依次取值。Top
16 楼oldsky(九指神丐)回复于 2003-06-03 15:36:09 得分 0
这算法好像也比较麻烦Top
17 楼enxi(恩熙 @_@)回复于 2003-06-04 10:34:41 得分 0
谢谢oldsky(九指神丐),这样逐个试探,会不会效率很低啊Top




