关于#matlab#的题目,请各位学长解答!

10.在2~2000的范围内找到一个素数,使得小于该数的所有素数之和比大于该素数但小于2000的所有素数之和大。
11.考虑两个相距10m的等高支点,有一根绳子两端被固定在两支点上,绳子长12m,重力不可忽略,试编写程序,画出绳子的形态,并标明最低点距离两支点的垂直高度。
12.使用字母ABCD…OP,共16个字母来表示1、2、3..16,共16个数,则AA表示17,AB表示18,…BA表示33,以此类推。请设计一个程序,能够实现输入一个正整数,输出对应的字母表示,并计算数字4000,10000的字母值。
13.假设你为一片星域的管理者,你控制的范围内出现了叛乱。你目前共有30艘飞船。消耗10艘飞船可以建造成一座飞船生产厂(每小时生产1艘飞船),构成飞船生产厂的飞船无法返还,敌方共有100艘飞船,并且不再增加,敌方无法建造飞船生产厂,也不会来攻击你。你的每艘飞船和敌方的战力相等(即战损比1:1),不考虑战斗所需时间、飞船飞行时间、建造所需时间,请算出最快需要多久能将叛军完全歼灭。

可以使用Matlab内置的primes函数和cumsum函数,得到小于2000的素数以及它们的前缀和,然后枚举大于2000的素数,并在前缀和中查找满足条件的数即可。

可以使用解析函数求出绳子形态,然后绘图,并计算最低点到两端点的高度。
可以设计一个算法,将正整数转换为16进制,并映射到字母。
可以使用数学模拟的方法模拟飞船的变化,在循环中每一次消耗10艘飞船建造生产厂并累加产生的飞船,直到所有敌军飞船被消灭。
题目 10

function result = sum_of_primes(n)
    primes = primes(2,n);
    sum_primes = sum(primes);
    for i = n:-1:2
        if isprime(i)
            sum_primes = sum_primes - i;
        end
        if sum_primes < i
            result = i;
            break;
        end
    end
end

题目 11

function result = lowest_point(h)
    syms x;
    y = sqrt(12^2 - (x-10)^2) - h;
    x_val = double(solve(y));
    y_val = double(subs(y,x,x_val));
    plot(x_val,y_val);
    line([x_val(1),x_val(2)],[h,h],'LineStyle','--');
    result = min(y_val) + h;
end

题目 12

function result = num_to_letter(n)
    letters = 'ABCDEFGHIJKLMNOP';
    result = '';
    while n > 0
        result = [letters(mod(n-1,16)+1),result];
        n = ceil(n/16);
    end
end

num_to_letter(4000)
num_to_letter(10000)

题目 13

function result = defeat_rebels(n,ships)
    factories = 0;
    while ships >= 10
        factories = factories + 1;
        ships = ships - 10;
        ships = ships + factories;
    end
    while ships >= 1 && n > 0
        n = n - ships;
        ships = ships - 1;
        if ships >= 10
            factories = factories + 1;
            ships = ships - 10;
            ships = ships + factories;
        end
    end
    result = factories;
end


defeat_rebels(100,30)