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)