Matlab编程练习8

问题

(问题都是来源某牛的题,用matlab编程实现)

  小易参加了一次考试,这场包含 n 个题目,第 i 个题目的分数是 si 。
  如果小易第 i 题目回答正确,他将得到 Si 分,否则该题目他将得到 0 分。
  最终的考试得分是所有题目得分的总和。
  由于阅卷老师很讨厌数字 5,在阅卷时如果一个学生的考试总分中含有数字 5,那么阅卷老师将气愤地给他 0 分。
那么小易考试的最高得分是多少?

输入例子

5 15 5 15 5

输出例子

40

例子说明
  如果所有题目都答对,总分为45,但里面包含了数字5,所以最高得分应该为40


解题思路

  1.先升序排序
  2.和值转字符串
  3.循环判断和值内是否有字符 '5’
  4.有 ‘5’ 则删除

Matlab代码实现

s=[50 5 100];
s=sort(s);                                %先排序,按从小到大删除
disp(s);
%% 出现总分出现5时,应该进行某一个题目分数归0
strSum=num2str(sum(s)); %将总分数转换为字符串
i=1;
while i<=size(strSum,2)
    if strSum(i)=='5'                    %5,处理
        flag=0;                          %flag用于指示本次循环是否删除成功
        for j=1:size(s,2)                %遍历删除一个满足条件的最小值,有可能删除一个还是不满足
            tmp=num2str(sum(s)-s(j));
            if tmp(size(tmp,2))~='5'     %减去一个数后判断末尾是否为5,不为5则成功减去
                news=[];
                for k=1:size(s,2)
                    if k~=j
                        news=[news,s(k)];
                    end
                end
                s=news;                  %更新s
                strSum=num2str(sum(s));  %更新求和
                flag=1;                  %已经删除
                break;
            end
        end
        %% 遍历一次不满足(无论删除那个还是有5),必须删除一个最小值
        if flag==0
            news=[];
            for k=2:size(s,2)
                news=[news,s(k)];
            end
            s=news;
            strSum=num2str(sum(s));
        end
        i=1;
    else
        i=i+1;                           %5,游标游走
    end
end
disp(sum(s));

python代码实现

A=[5,50,100]
A=sorted(A)                   #升序排序
SsumA='%d' % sum(A)
while SsumA.count('5')!=0:    #和值有5,处理
    flag=0
    for i in range (len(A)):
        tmp=A[i]
        sumA=sum(A)-tmp
        SsumA='%d' % sumA
        if SsumA[-1]!='5':
            del A[i]
            flag=1
            break
    if flag==0:
        del A[i]
        SsumA='%d' % sum(A)
print(sum(A))

总结

   对比Matlab和python的代码可以发现,确实python的语法风格更加灵活,实现也更加简洁,看来matlab确实比较适合做仿真…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值