Matlab训练3
路漫漫其修远兮,吾将上下而求索
Matlab官方帮助文档
1-1、1-2 进制转换
首先,matlab具有进制转化函数dec2bin(十进制转二进制),bin2dec(二进制转十进制),dec2base…但是注意:在使用上述函数的时候,只能实现非负整数与二进制数之间的转化,如果使用负整数的时候会出现错误。
1)十进制转其他进制
十进制整数进行N进制转换时,我们采用短除法,即“除N取余,逆序排列”法。具体是把十进制数,除以N,得到商和余数,保留余数继续除N,直到商为0,将余数倒过来排列即可。
小数则是“乘N取整,顺序排列”法。具体是把十进制数乘N后取整,保留整数部分后小数部分继续乘N,直到积中小数部分为0或者符合要求的精度(因为十进制小数转化为其他进制时可能会出现无限位的小数),将取出的整数部分按照取出的顺序排列即可。
2)其他进制转10进制
一般方法:逢N进1, 按照从低位到高位的权值来进行计算,第0位的权值就是N的0次方…依次递增下去,最后把结果进行相加即可。
1-1
clc;clear;
decNum=input('请输入一个10进制数:');
binNum=0;n=decNum;
i=1;remainder=0;
while n~=0remainder=mod(n,2);n=fix(n/2); %注意这里的取整函数binNum=binNum+remainder*i;i=i*10;
end
fprintf("十进制数%d转换为二进制为%d\n",decNum,binNum);
1-2
clc;clear;
binNum=input('请输入一个2进制数:');
decNum=0;n=binNum;
i=0;remainder=0;
while n~=0remainder=mod(n,10);n=fix(n/10); %注意这里的取整函数decNum=decNum+remainder*power(2,i);i=i+1;
end
fprintf("二进制数%d转换为十进制为%d\n",binNum,decNum);
1-3 思路:利用num2str进行转化,将八位数化为一维字符串数组后直接进行比较
即可。(理清减数与被减数的关系,注意最高位无论如何都是置一的)
clc;clear;
n=input('请输入第一个8位数n:');
m=input('请输入第二个8位数m:');
n=num2str(n);
m=num2str(m);
s=[1];
for i=2:8%字符串元素直接进行比较(通过比较ASCII码值的大小)if n(i)>=m(i) s(i)=1;elses(i)=0;end
end
s
1-4 思路:边沿数值=矩阵最上面一行+矩阵底部一行+其他,其他的元素均为每一行的首元素或尾元素计算即可。
clc;clear;
n=input('请输入矩阵的行数n:');
m=input('请输入矩阵的列数m:');
array=input('请输入n行m列的矩阵,用[]括起来:');
s=sum(array(1,:))+sum(array(n,:)); %为避免与sum函数冲突,使用s为变量名,计算矩阵顶行与底行
for i=2:n-1s=s+array(i,1)+array(i,m);
end
fprintf("该矩阵的边缘数值和为:%d\n",s);
1-5 思路:直接相加,利用矩阵的基本运算组合
clc;clear;
n=input('请输入矩阵的行数与列数n:');
array=input('请输入n行n列的矩阵,用[]括起来:');
s=sum(sum(array(:,1:2:n)));
fprintf("该矩阵的奇数列和为:%d\n",s);
1-6、1-7均与因子有关
先列出求因子的模板。
%求n的所有因子
a=1:n;
factor=find(mod(n,a)==0);
原理:一个数的因子即能整除n的数利用mod函数加判断,然后巧用find函数
1-6
clc;clear;
j=1;
for i=1:100a=1:i;factor=find(mod(i,a)==0);%算和的时候除去本身if sum(factor)-i==ipfNum(j)=i;j=j+1;end
end
disp('100以内的完全数(perfect number)有:');
pfNum
1-7与1-6的区别不大
clc;clear;
j=1;
for i=1:100a=1:i;factor=find(mod(i,a)==0);if sum(factor)-i>iabNum(j)=i;j=j+1;end
end
disp('100以内的盈数(abundant number)有:');
abNum
1-8
看大家交上来的1-8,或多或少都不是那么完美。这个题目的1-8有两个要求,要求一: 找到和为1000的连续正整数序列。要求二: 输出对应整数列的中整数的个数。
思路:题目意思比较好懂,普通方法就是三层循环暴力破解,第一重控制这个序列的起点,第二重控制序列元素的个数,第三重输出符合题意的序列。但是这样耗费的时间比较长,假设我们要求的是和为n的连续正整数序列,那么最多可能要耗费 n 3 n^3 n3次遍历循环。但是经过改进后,循环最多循环 2 n + 1 2n+1 2n
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
