条条大路通罗马。
Matlab官方帮助文档,记得复习代码中涉及的常用函数。
提供了作业题的答案,以及一些新鲜算法,感兴趣的可以自行理解和百度搜索,无强求。
(1_1——1_11之前讲过)
贴一下其他的几篇链接:
Matlab训练2
Matlab训练3
Matlab训练4
Matlab训练5
Matlab训练6
2-1
clc;
clear;
s=0;
n=input('请输入一个数n:');
k=input('请输入一个数k:');
for i=1:n
if mod(i,k)==0
s=s+i;
end
end
s
2-2
此题需要注意字符串在input时用‘ ’引号引用起来才能成功赋值,另外复习fprintf和disp、以及length函数(详细请戳蓝色链接)
clc;clear;
str = input('请输入一串字符串:');
len = length(str);
fprintf('str的长度为:%d\n',len);
2-3
灵活运用矩阵,一个字符串就是一个一维数组
clc;clear;
str = input('请输入一个字符串:');
str1 = fliplr(str);
%也可以str1=str(end:-1:1);
fprintf('%d\n',strcmp(str,str1));
2-4
普通做法:for循环或者利用^符号运算(c/c++中该符号表示异或运算)【缺点:数据大时计算慢】
高级做法:快速幂
经计算,在计算2的次幂时,大于290363次幂时,快速幂更快小于等于时,普通的循环更快。数据越大差距越明显,非竞赛时可以就使用普通做法。
clc;clear;
m = input('请输入底数m:');
n = input('请输入指数n:');
%普通算法
tic %计时开始
mul_nomal = 1;
for i = 1:n
mul_nomal = mul_nomal*m;
end
mul_nomal
t_normal = toc; %计时结束
%快速幂算法
tic; %计时开始
mul_quickPow = 1;
while n>0
if mod(n,2)~=0 %判断是否为奇数
mul_quickPow = mul_quickPow*m;
end
n = fix(n/2); %除2取整
m = m*m;
end
mul_quickPow
t_quickPow = toc; %计时结束
if t_normal>t_quickPow
disp('快速幂更快')
end
2-5
方法有很多,最简单的是使用matlab内置函数isprime.(注意一下1不是素数!!!)此外判断素数的方法还有以下几种:
方法一: 暴力,官方叫试除法