VB的一个算法问题

如题。假设要统计一次期末成绩(假设一共有5个学科,考试成绩总分是由你所选择的科目决定的,你可以全选上,也可以选2科,但最少选择1科)。若计算出你所选学科的总分来作为考试成... 如题。假设要统计一次期末成绩(假设一共有5个学科,考试成绩总分是由你所选择的科目决定的,你可以全选上,也可以选2科,但最少选择1科)。若计算出你所选学科的总分来作为考试成绩,应该有5+10+10+5+1=31种不同的计算结果。我是用的Checkbox做控件,选中该科就写check.value=1。本想用if-else来实现。但是由于情况太多,求大神 有木有简单一点的算法?(我的思路如下:)
if check1.value=1 and check2.value=1 and check3.value=1 and check4.value=1 and check5.value=1 then
Text0.text=Val(text1)+val(text2)+val(text3)+val(text4)+val(text5)
(解释一下:text0.text是输出总分的地方,text1,2,3,4,5是对应科目的分数)
else
if .....
else
if.....(穷举所有情况)
展开
 我来答
网海1书生
科技发烧友

2014-01-16 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26231

向TA提问 私信TA
展开全部
你换个思路嘛!用累加就很容易解决了,用不着考虑有多少种组合!

dim x as single
if check1.value=1 then x=x+val(text1.text)
if check2.value=1 then x=x+val(text2.text)
if check3.value=1 then x=x+val(text3.text)
if check4.value=1 then x=x+val(text4.text)
if check5.value=1 then x=x+val(text5.text)
text0.text=x
money0_04c351c2
2014-01-16 · TA获得超过4142个赞
知道大有可为答主
回答量:5505
采纳率:49%
帮助的人:1626万
展开全部
用二进制解决吧。
选中的科目为1,未选中的科目为0,那总共是2^5=32种。去掉全都不选,剩31种。
然后你就可以用 Select case 来解决这个问题了。
在实际应用中,你还可以考虑直接按位计算来解决,连Select Case都不用。
例如:假设所选科目信息保存在变量K里面
那么结果可以是 结果= 科目1成绩 x (K And 2^1) + 科目2成绩 x (K And 2^2) + ……
这样如果没选该科目,乘以零的结果也必然为零,自然就忽略掉了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Geely2004
2014-01-16 · TA获得超过204个赞
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:97.3万
展开全部
给你个思路:先定义个总分数变量 fen,再建立一个checkbox数组,check(1),check(2)......然后用for netx 循环遍历数组,在循环内,if chedk(i).value=1,then fen =fen+val(text(i).text) ,在循环外,text0.text=fen。

希望能帮到你!
追问
其实你和楼上顶点思路一样。不过人家先回答的。就把分给他了。不过同样感谢你的精彩回答!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式